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