std::vector 尺码 header
std::vector size in header
我有一个关于 std::vector 的小问题。在 main.h 中,我尝试制作固定大小的 int 向量
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);
}
假设 foo
是一个数据成员,你的语法是无效的。一般来说,你可以像这样初始化一个T类型的数据成员:
T foo{ctor_args};
或这个
T foo = T(ctor_args);
然而,std::vector<int>
有一个采用 std::initializer_list<int>
的构造函数,这意味着第一种形式将产生一个大小为 1 的向量,其中单个元素的值为 7。所以你被困住了第二种形式:
std::vector<int> foo = std::vector<int>(7);
如果您受困于 C++11 之前的编译器,则需要使用构造函数:
class bar
{
public:
bar() : foo(7) {}
private:
std::vector<int> foo;
};
并注意在所有构造函数中初始化向量(如果适用。)
初始化 class 成员(内置类型除外)的最有效方法是使用初始化列表。
所以这里最好的解决方案是在 class 构造函数的初始化列表中构造长度为 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);
}
我有一个关于 std::vector 的小问题。在 main.h 中,我尝试制作固定大小的 int 向量
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);
}
假设 foo
是一个数据成员,你的语法是无效的。一般来说,你可以像这样初始化一个T类型的数据成员:
T foo{ctor_args};
或这个
T foo = T(ctor_args);
然而,std::vector<int>
有一个采用 std::initializer_list<int>
的构造函数,这意味着第一种形式将产生一个大小为 1 的向量,其中单个元素的值为 7。所以你被困住了第二种形式:
std::vector<int> foo = std::vector<int>(7);
如果您受困于 C++11 之前的编译器,则需要使用构造函数:
class bar
{
public:
bar() : foo(7) {}
private:
std::vector<int> foo;
};
并注意在所有构造函数中初始化向量(如果适用。)
初始化 class 成员(内置类型除外)的最有效方法是使用初始化列表。
所以这里最好的解决方案是在 class 构造函数的初始化列表中构造长度为 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);
}