如何初始化字符串的std :: array?

时间:2018-09-17 05:11:37

标签: c++ stdstring stdarray list-initialization

我有一个std::array<std::string, 4>,我想使用它保存要读取到程序中的文本文件的路径名。到目前为止,我声明了数组,然后为每个std::string对象分配了值。

#include <array>
#include <string>
using std::array;
using std::string;
...
array<string, 4> path_names;
path_names.at(0) = "../data/book.txt";
path_names.at(0) = "../data/film.txt";
path_names.at(0) = "../data/video.txt";
path_names.at(0) = "../data/periodic.txt";

我之所以使用这种方法,是因为我事先知道数组中恰好有4个元素,数组的大小不会改变,并且每个路径名都是硬编码的,并且也不能更改。

我只需要一步就可以声明和初始化数组及其所有元素。例如,这就是我要声明一个初始化int s数组的方式:

array<int, 10> ia2 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};  // list initialization

除了std::string,我该怎么做?创建这些字符串将涉及调用构造函数。这不仅仅只是对一堆int进行列表初始化。该怎么做?

1 个答案:

答案 0 :(得分:0)

这可以通过两种方式完成:

  1. 在列表初始化中使用字符串文字

array<string, 4> path_names = {"../data/book.txt", "../data/film.txt", "../data/video.txt", "../data/periodic.txt"};

  1. 为字符串分配路径名,并在初始化时使用字符串。

string s1 = "../data/book.txt";
string s2 = "../data/film.txt";
string s3 = "../data/video.txt";
string s4 = "../data/periodic.txt";
array<string, 4> path_names = {s1, s2, s3, s4};

如果您想避免在此处复制,可以使用std::move

array<string, 4> path_names = {std::move(s1), std::move(s2), std::move(s3), std::move(s4)};