我可以在初始化列表中用 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());

这需要重复 countvalue

如果你想使用初始化列表,你可以这样写:

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 向量吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何初始化一个列表并在一行中用另一个列表扩展它? [复制]

如何在颤振飞镖中使用相同的元素初始化列表?

如何在简洁的单行初始化语句中用 n 个不同的空数组填充新数组? [复制]

Python'列表索引必须是整数,而不是元组”错误

共享内存 - 警告:指针和整数之间的比较

如何初始化整数列表[重复]