如何将C字符串数组复制到C ++ std :: vector <std :: string>?

时间:2016-01-15 16:09:48

标签: c++ stdvector c-strings

中接受的答案
  1. Convert char** (c) to vector<string> (c++)
  2. copying c array of strings into vector of std::string
  3. converting an array of null terminated const char* strings to a std::vector< std::string >
  4. 在声明它的同时填充向量:

    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);
    

    如何复制阵列呢?

3 个答案:

答案 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);