标题中的std :: vector大小

时间:2015-03-27 10:06:43

标签: c++ vector std

我对std :: vector有一个小问题。在main.h中,我尝试使用固定大小的int vector

std::vector<int> foo(7);

但是g ++给出了这个错误:

../test/main.h:21:26: error: expected identifier before numeric constant
 std::vector<int> foo(7);
../main/main.h:21:26: error: expected ',' or '...' before numeric constant

如何创建固定大小长度的私有向量变量?或者我应该简单地在构造函数

中创建
for(int i=0; i<7;i++){
    foo.push_back(0);
}

2 个答案:

答案 0 :(得分:2)

假设foo是数据成员,则语法无效。通常,您可以像这样初始化类型为T的数据成员:

T foo{ctor_args};

或者

T foo = T(ctor_args);

但是,std::vector<int>有一个带std::initializer_list<int>的构造函数,这意味着第一个形式会产生一个带有单个元素值为7的size-1向量。所以你被困在第二个形式:

std::vector<int> foo = std::vector<int>(7);

如果你遇到了一个pre-C ++ 11编译器,你需要使用一个构造函数:

class bar
{
public:
    bar() : foo(7) {}
private:
  std::vector<int> foo;
};

并注意在所有构造函数中初始化向量(如果适用)。

答案 1 :(得分:0)

初始化类成员(除了内置类型)最有效的方法是使用初始化列表。

所以这里最好的解决方案是在类构造函数的启动列表中构造长度为7的向量:

(我还建议您使用固定值的定义7.如果在未来中将其更改为8,则不必更改所有代码中的值7)

file.h:

#define YOURCLASSFOOSIZE 7
class yourClass
{
public:
    yourClass(): foo(YOURCLASSFOOSIZE) {}
private:
    std::vector<int> foo;
};

file.cpp:

for(int i=0; i < YOURCLASSFOOSIZE; i++)
{
    foo.push_back(0);
}