VS2012中不允许使用{...}进行vector <string>初始化?</string>

时间:2014-06-01 06:18:01

标签: c++ string vector

我想知道如何初始化std::vector字符串,而不必在 Visual Studio Ultimate 2012 中使用一堆push_back


我已尝试vector<string> test = {"hello", "world"},但这给了我以下错误:

  

Error: initialization with '{...}' is not allowed for an object of type "std::vector<std::string, std::allocator<std::string>>


  • 为什么会收到错误?
  • 关于如何存储字符串的任何想法?

2 个答案:

答案 0 :(得分:8)

问题

如果您想使用代码段中的内容,则必须升级到更新的编译器版本(以及标准库实现)。

VS2012 doesn't support std::initializer_list,这意味着您尝试使用的std::vector构造函数之间的重载根本不存在。

换句话说;该示例无法使用 VS2012 进行编译。


潜在的解决方法

使用中间数组来存储std::string,并使用它来初始化向量。

std::string const init_data[] = {
  "hello", "world"
};

std::vector<std::string> test (std::begin (init_data), std::end (init_data));

答案 1 :(得分:0)

1。为什么我会收到错误消息? 根据此2012 November update,Visual Studio 2012不支持在question之前进行列表初始化。

2。关于如何存储字符串的任何想法?

使用push_back()是完全有效的解决方案。示例:

#include<vector>
#include <string>
using namespace std;
int main()
{
    vector<string> test;
    test.push_back("hello");
    test.push_back("world");
    for(int i=0; i<test.size(); i++)
     cout<<test[i]<<endl;
    return 0;
}