可能重复:
how-to initialize 'const std::vector<T>' like a c array
当std :: vector是结构的成员时,为std :: vector提供显式初始化器的正确语法是什么?这是结构:
struct pattern_info
{
std::string pattern;
std::vector<std::string> patterns;
};
以下是我想要初始化它的方法(???是我不确定的部分):
pattern_info p = { "", ??? };
我知道{}会为所有结构成员提供合理的默认值,但我不想这样做。
当我使用-std = c ++ 0x进行编译时,我可以这样做(它似乎有用):
pattern_info p = { "", {} };
我正在使用gcc版本4.4.5(Debian 4.4.5-8),并希望在没有-std = c ++ 0x选项的情况下执行此操作。
答案 0 :(得分:4)
只有C ++ 0x的std::vector
有这样的初始值设定项。在当前的C ++中,您必须使用现有的向量,如...
std::vector<T> foo;
...push_back...push...push...
const std::vector<T> target = foo;
...或使用boost::assign
之类的解决方法。
第二种选择是使用std::vector
的替代构造函数之一。其中一个是模板并采用输入迭代器范围:
const int foo[] = { 1, 1, 2, 3, 5, 8, 13 };
const std::vector<int> bar (foo,
foo + (sizeof foo / sizeof *foo));
答案 1 :(得分:2)
这只能在C ++ 0x中实现,如前所述。作为替代方案,您可以使用Boost。看一下引言中给出的例子:
&GT; http://www.boost.org/doc/libs/1_39_0/libs/assign/doc/#intro
答案 2 :(得分:0)
如果vector
将为空(如c ++ 0x示例版本所示),那么,
pattern_info p = { "" };
我想,您甚至可以跳过""
来std::string
。如果你想要非空字符串,那么只需初始化。要摆脱编译器警告,您可以尝试:
pattern_info p = {};
修改强>: 如果你想逃避警告,那么提供一个默认的构造函数。
struct pattern_info
{
//...
pattern_info() : pattern(""), patterns(0) {}
};
并按原样声明:
pattern_info p;