如何初始化 std::array 个字符串?
How to initialize an std::array of strings?
我有一个 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
那样简单。怎么做?
这可以通过两种方式完成:
- 在列表初始化中使用字符串文字
array<string, 4> path_names = {"../data/book.txt", "../data/film.txt", "../data/video.txt", "../data/periodic.txt"};
- 正在为字符串分配路径名并在初始化中使用该字符串。
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)};
我有一个 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
那样简单。怎么做?
这可以通过两种方式完成:
- 在列表初始化中使用字符串文字
array<string, 4> path_names = {"../data/book.txt", "../data/film.txt", "../data/video.txt", "../data/periodic.txt"};
- 正在为字符串分配路径名并在初始化中使用该字符串。
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)};