【问题标题】:Conversion of string array to vector of string type字符串数组到字符串类型向量的转换
【发布时间】:2012-02-15 20:15:17
【问题描述】:

我想用 arr 的以下数据初始化一个向量,因为我必须初始化一个字符串类型的数组并将其值复制到向量字符串 我就是这样做的

它给出了很多错误

string arr[6][8]={
"AAAAAAAA",
"ABWBWBWA",
"ABWBWBWA",
"ABWBWBWA",
"ABWBWBWA",
"AAAAAAAA"};
vector<string> v(arr,arr+sizeof(arr)/sizeof(string));   

我已经为 int 类型的 int 数组和向量做了它。 像这样,

int vv[]={0,0,0,8};
vector<int> v(vv,vv+sizeof(vv)/sizeof(int));        

它对这种类型非常有效,但对于字符串类型它不起作用。

【问题讨论】:

    标签: c++ arrays vector multidimensional-array initialization


    【解决方案1】:

    你的数组没有意义。应该是:

    std::string arr[] = {
      "AAAAAAAA",
      "ABWBWBWA",
      "ABWBWBWA",
      "ABWBWBWA",
      "ABWBWBWA",
      "AAAAAAAA" };
    

    然后

    std::vector<std::string> v(arr, arr + sizeof(arr) / sizeof(std::string));
    

    应该按预期工作。

    或者,您可以修复 6 并说 v(arr, arr + 6);

    然而,在现代 C++ 中,你会说,

    std::vector<std::string> v {
      "AAAAAAAA",
      "ABWBWBWA",
      "ABWBWBWA",
      "ABWBWBWA",
      "ABWBWBWA",
      "AAAAAAAA"
    };
    

    【讨论】:

    • 在int类型的情况下我们也可以这样做吗?
    • std::vector<:string> v { "AAAAAAAA", "ABWBWBWA", "ABWBWBWA", "ABWBWBWA", "ABWBWBWA", "AAAAAAAA" };
    • 它说错误:标量对象'v'需要初始化器中的一个元素
    • @fsl4faisal:你需要一个现代编译器。在 GCC 中,说-std=c++0x
    • cc1plus:错误:无法识别的命令行选项“-std=c++0x”
    【解决方案2】:

    arr 的类型实际上不是string 而是char[6][8](这编译起来很奇怪,因为您正在使用char[9] 对象初始化此数组的成员:字符串文字包含终止的'\0'特点)。为了正确获得静态大小数组的大小,我始终建议 not 使用使用 sizeof() 的 C hack。相反,使用这样的函数模板(实际上,我只是包含了size() 模板,因为您使用了大小;使用begin()end() 来获取迭代器更好):

    template <typename T, int Size> int size(T (&array)[Size]) { return Size; }
    template <typename T, int Size> T* begin(T (&array)[Size]) { return array; }
    template <typename T, int Size> T* end(T (&array)[Size])   { return array + Size; }
    ...
    std::vector<std::string> v(begin(arr), end(arr));
    

    在 C++2011 中,begin()end() 函数是标准 C++ 库的一部分。当然,使用 C++2011 你可以直接使用初始化列表。

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 2014-08-30
      • 2011-03-25
      • 1970-01-01
      • 2014-12-08
      • 2020-05-08
      相关资源
      最近更新 更多