如何在 MS 编译器中使用数组初始化 C++ 向量/集?

Posted

技术标签:

【中文标题】如何在 MS 编译器中使用数组初始化 C++ 向量/集?【英文标题】:How to init C++ vector/set with array in MS compiler? 【发布时间】:2014-04-02 18:42:59 【问题描述】:

这就是问题所在。 我发现在 C++11 中可以通过这种方式用数组初始化 std::vector:

std::vector<int> v = 1, 2, 3, 4;

这看起来真的很自然且可读,但问题是它在 Visual Studio 2012 的 MS C++ 编译器中不起作用。所以这是否可以在此编译器中启用此功能,或者我应该安装更新版本的 MS 编译器(如果存在)?

【问题讨论】:

安装较新的版本。是的,它存在。一般消费的最新版本是带有 2013 年 11 月 CTP 版本编译器的 Visual Studio 2013(甚至是 Express 版本)。安装 Visual Studio 2013 后,您必须下载并安装 CTP 版本。 @htzfun:您可以在此处在在线 c++ 编译器(完全符合 c++11)上试用您的程序:coliru.stacked-crooked.com msdn.microsoft.com/en-us/library/vstudio/… 2013 年功能列表支持 2013 年的 noc CTP 是一个测试版,MS 认为它不适合构建商业发布的应用程序,但可以用于测试。也就是说,2013 非 CTP 支持 vector 的大括号初始化,但我隐约记得有一个涉及破坏第一个元素的错误...... 【参考方案1】:

std::vector&lt;int&gt; v = 1, 2, 3, 4; 使用初始化列表,而不是数组。它调用构造函数

vector( std::initializer_list<T> init, 
        const Allocator& alloc = Allocator() );

据我所知,你的编译器版本不支持初始化列表,所以如果你想使用它们,你必须升级。作为一种解决方法,您可以声明一个临时数组并从中初始化向量。

int[] tmp = 1,2,3,4;
vector<int> v(std::begin(tmp), std::end(tmp));

【讨论】:

tmp+sizeof(tmp) 这将导致段错误(如果幸运的话) @Matteo 谢谢。修改它以使用 std::end。【参考方案2】:

如 cmets 所述,您必须升级到 C++11 支持的新版本。

【讨论】:

以上是关于如何在 MS 编译器中使用数组初始化 C++ 向量/集?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中初始化非常大的向量

我们如何在 C++ 中初始化所有值为 0 的向量 [重复]

在 MS Visual C++ 中启用 VLA(可变长度数组)?

如何在 C++ 中初始化向量 [重复]

用向量 c++ 中的指针成员初始化对象

armadillo C++:从数组初始化矩阵