中接受的答案
在声明它的同时填充向量:
vector<string> vec(cArray, cArray + cArrayLength)
但是,如果我需要单独进行,因为我需要扩展向量的范围,例如在
vector<string> vec;
if (some_condition)
// copy a char** to vec
else
// copy another char** to vec
do_something(vec);
如何复制阵列呢?
答案 0 :(得分:2)
std::vector
提供了一个赋值运算符:
std::vector<std::string> vec;
if (some_condition)
// copy a char** to vec
vec = std::vector<std::string> vec(cArray, cArray + cArrayLength);
else
// copy another char** to vec
vec = std::vector<std::string> vec(cArray, anotherCArray + anotherCArrayLength )
答案 1 :(得分:1)
您始终可以将复制构造函数用作
if(cond)
{
vec = std::vector<std::string>(std::begin(arr1), std::end(arr1));
}
else
{
vec = std::vector<std::string>(std::begin(arr2), std::end(arr2));
}
答案 2 :(得分:1)
一些答案已经指出创建一个临时对象,然后将结果分配给目的地。只要您使用C ++ 11(或更高版本),这将作为移动分配完成,这通常是完全可以接受的。
另一种适用于旧编译器(和新编译器)的可能性如下:
char **src;
size_t len;
if (cond) {
src = cArray;
len = cArrayLen;
}
else {
src = CAnotherArray;
len = CAnotherArrayLen;
}
vector<string> vec(src, src+len);