我可以在初始化列表中使用10个相同的整数初始化STL向量吗?

Xav*_*ier 42 c++ constructor stl initializer-list

我可以在初始化列表中使用10个相同的整数初始化STL向量吗?到目前为止,我的尝试都让我失望.

Ed *_* S. 120

使用适当的构造函数,该构造函数采用大小和默认值.

int number_of_elements = 10;
int default_value = 1;
std::vector<int> vec(number_of_elements, default_value);
Run Code Online (Sandbox Code Playgroud)


Dav*_*eas 33

我想你的意思是:

struct test {
   std::vector<int> v;
   test(int value) : v( 100, value ) {}
};
Run Code Online (Sandbox Code Playgroud)

  • 这个仅代码的答案记录很少,而且比必要的更复杂.请参阅下面的Ed S.的回答. (12认同)
  • @ Cokemonkey11:这个答案根本没有*记录,你可以在你最喜欢的参考文献中找到文档(我的是cppreference).如果没有类和构造函数Ed S.的答案没有在初始化列表*中初始化向量*,这是问题的一部分,它不是必要的*复杂.对于这种情况,它并不重要,但考虑问题是关于一个int数组,堆栈中的初始化和初始化列表的一部分是不同的. (6认同)

Mah*_*dsi 7

如果你正在使用C++ 11和GCC,你可以这样做:

vector<int> myVec () {[0 ... 99] = 1};
Run Code Online (Sandbox Code Playgroud)

它被称为范围初始化,是一个仅限GCC的扩展.

  • 哇,我从来没有听说过这个.当然,最好只使用正确的构造函数. (2认同)
  • 是的.但这对于数组和结构来说非常方便.无论如何,GCC有一堆做疯狂事情的​​扩展.最好坚持使用标准C++. (2认同)

Agu*_*gus 7

从C ++ 0x支持vector的初始化列表。如果您使用C ++ 98编译

int number_of_elements = 10;
int default_value = 1;
std::vector<int> vec(number_of_elements, default_value);
Run Code Online (Sandbox Code Playgroud)


Raf*_*cki 5

你可以用std::vector构造函数做到这一点:

vector(size_type count, 
                 const T& value,
                 const Allocator& alloc = Allocator());
Run Code Online (Sandbox Code Playgroud)

这需要countvalue重复.

如果要使用初始化列表,可以编写:

const int x = 5;
std::vector<int> vec {x, x, x, x, x, x, x, x, x, x};
Run Code Online (Sandbox Code Playgroud)