在char数组向量上的Push_back

时间:2014-02-17 12:42:57

标签: c++ eclipse

我遇到了push_back的问题,它不适用于我的代码:(

    const int DIM = 10;
    vector<char[DIM]> categorie;

    int function_1(char cat[DIM]){
       categorie.push_back(cat);
       return 0;
    }

我该如何解决?

谢谢!

PS:我正在使用Eclipse CDT

3 个答案:

答案 0 :(得分:3)

这不起作用。 std::vector<T>要求T可以复制或移动。普通数组都不是。请注意,在function_1内,cat是指向char的指针,而不是char的数组。

如果你有C ++ 11,请使用std::array

const int DIM = 10;
vector<array<char, DIM>> categorie;

int function_1(array<char, DIM> cat){
   categorie.push_back(cat);
   return 0;
}

如果你没有,那么你必须将数组包装在一个类中并使用它。当然,Boost.Array可以为你做到这一点。

答案 1 :(得分:1)

由于历史原因,内置数组是相当奇怪的生物,无法按值复制,分配或传递;这使得将它们保存在容器中相当尴尬。尽管有外观,但函数的参数实际上是指针char *,因此与push_back所期望的类型不匹配。即使你有一个实际的数组,push_back也行不通,因为它需要一个可复制的类型。

如果你使用的是C ++ 11,那么std::array<char, DIM>会更方便。否则,您可以将数组包装在一个小类中并存储它。

答案 2 :(得分:0)

<强> 1

int function_1(char cat[DIM]);不是你的想法。 它衰败到int function_1(char* cat); 正确的语法是int function_1(char (&cat)[DIM]);

<强> 2

C-array不可复制/可移动,std::vector至少需要一个。

第3

您最好的选择是使用std::vector<std::array<char, Dim>>