C++ 如何初始化字符串的std::数组?
我有一个C++ 如何初始化字符串的std::数组?,c++,stdstring,stdarray,list-initialization,C++,Stdstring,Stdarray,List Initialization,我有一个std::array,用于保存要读入程序的文本文件的路径名。到目前为止,我声明数组,然后为每个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) = "
std::array
,用于保存要读入程序的文本文件的路径名。到目前为止,我声明数组,然后为每个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";
如果不是对于
std::string
,我将如何执行相同的操作?创建这些字符串需要调用构造函数。它并不像初始化一堆int
s那样简单。如何做到这一点?这可以通过两种方式实现:
数组路径_name={../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”代码>
数组路径_name={s1,s2,s3,s4}代码>
如果您想避免在此处复制,可以使用std::move
:
array<string, 4> path_names = {std::move(s1), std::move(s2), std::move(s3), std::move(s4)};
数组路径_name={std::move(s1)、std::move(s2)、std::move(s3)、std::move(s4)};
您是否尝试在初始值设定项中使用字符串文字而不是数字?我没有想到这会起作用。我会试试看。如果你确定索引在范围内(在给定的情况下适用),那么可能重复的在
进行范围检查-过时,所以更喜欢索引运算符[]
…@Galaxy是和是…第二个变体在我看来并不比问题中的那个好;至少,我会移动字符串,而不是复制(std::move(sN)
)…同时更新了答案,建议std::move
。
array<string, 4> path_names = {std::move(s1), std::move(s2), std::move(s3), std::move(s4)};