【问题标题】:How to copy array of C strings to C++ std::vector<std::string>?如何将 C 字符串数组复制到 C++ std::vector<std::string>?
【发布时间】:2016-01-15 16:09:47
【问题描述】:

接受的答案

  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 >

在声明向量的同时填充向量:

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

那我该如何复制数组呢?

【问题讨论】:

  • vec.assign(cArray, cArray + cArrayLength);
  • std::copy 和std::back_inserter 太.....研究!!

标签: c++ stdvector c-strings


【解决方案1】:

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 )

【讨论】:

    【解决方案2】:

    你总是可以使用复制构造函数

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

    【讨论】:

      【解决方案3】:

      一些答案​​已经指向创建一个临时对象,然后将结果分配给您的目的地。只要您使用 C++11(或更高版本),这将作为移动分配完成,这通常是可以接受的。

      另一种适用于旧编译器(和新编译器)的可能性是:

      char **src;
      size_t len;
      
      if (cond) { 
          src = cArray;
          len = cArrayLen;
      }
      else {
          src = CAnotherArray;
          len = CAnotherArrayLen;
      }
      
      vector<string> vec(src, src+len);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        • 2012-01-06
        • 2021-08-13
        • 2014-01-11
        • 1970-01-01
        • 1970-01-01
        • 2012-05-02
        相关资源
        最近更新 更多