我可以在初始化列表中用 10 个相同的整数初始化 STL 向量吗?
Posted
技术标签:
【中文标题】我可以在初始化列表中用 10 个相同的整数初始化 STL 向量吗?【英文标题】:Can I initialize an STL vector with 10 of the same integer in an initializer list? 【发布时间】:2012-05-01 12:55:38 【问题描述】:我可以在初始化列表中使用 10 个相同的整数来初始化 STL 向量吗?到目前为止,我的尝试都失败了。
【问题讨论】:
有一个std::vector<>
constructor (2) 可以做到这一点;为什么需要初始化列表?
@ildjarn:我认为他的意思是在构造函数初始化列表中,而不是在构造函数主体中。
@GManNickG:对我来说听起来不像。 OP 要求一种方法来初始化一个向量,其中 X 个元素都设置为相同的值。是的,他确实提到了一个初始化列表,但是看到已经有一个满足 requirement 的构造函数应该足够好
@EdS.:澄清一下,我认为 OP 是在问如何做到这一点:struct foo foo() : INIT_HERE ;
而不是这个:struct foo foo() INIT_HERE; ;
。
是的 GManNickG 就是我要找的。span>
【参考方案1】:
使用适当的构造函数,它接受大小和默认值。
int number_of_elements = 10;
int default_value = 1;
std::vector<int> vec(number_of_elements, default_value);
【讨论】:
谢谢,这应该是公认的答案。【参考方案2】:我认为你的意思是:
struct test
std::vector<int> v;
test(int value) : v( 100, value )
;
【讨论】:
@Cokemonkey11:这个答案没有记录在案,你可以在你最喜欢的参考资料中找到文档(我的是 cppreference)。它没有比必要的更复杂,没有类和构造函数 Ed S. 的答案不会在初始化列表中初始化向量 ,这是问题的一部分.对于这种情况,这无关紧要,但考虑问题是否与整数数组有关,堆栈中的初始化和作为初始化器列表的一部分是不同的。【参考方案3】:如果你使用 C++11 和 GCC,你可以这样做:
vector<int> myVec () [0 ... 99] = 1;
它被称为远程初始化,是一个仅限 GCC 的扩展。
【讨论】:
哇,我从来没有听说过。当然,最好只使用正确的构造函数。 是的。但这对于数组和结构来说很方便。无论如何,GCC 有一堆做疯狂事情的扩展。最好坚持标准 C++。 “指定初始化器”扩展仅适用于 C 代码,不适用于 C++。有关可用 GCC 扩展的列表,请参阅 gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions 和 gcc.gnu.org/onlinedocs/gcc/…【参考方案4】:C++0x 支持向量的初始化列表。如果你用 C++98 编译
int number_of_elements = 10;
int default_value = 1;
std::vector<int> vec(number_of_elements, default_value);
【讨论】:
【参考方案5】:您可以使用std::vector
构造函数来做到这一点:
vector(size_type count,
const T& value,
const Allocator& alloc = Allocator());
这需要重复 count
和 value
。
如果你想使用初始化列表,你可以这样写:
const int x = 5;
std::vector<int> vec x, x, x, x, x, x, x, x, x, x;
【讨论】:
【参考方案6】:你可以发布你在做什么
int i = 100;
vector<int> vInts2 (10, i);
vector<int>::iterator iter;
for(iter = vInts2.begin(); iter != vInts2.end(); ++iter)
cout << " i " << (*iter) << endl;
【讨论】:
以上是关于我可以在初始化列表中用 10 个相同的整数初始化 STL 向量吗?的主要内容,如果未能解决你的问题,请参考以下文章