在c ++ 11中初始化字符串列表

时间:2017-06-03 05:21:24

标签: c++ list

我试图使用以下代码初始化c ++ 11中的字符串列表,并且由于各种原因而失败。错误说我需要使用构造函数初始化列表,我应该使用像list<string> s = new list<string> [size]这样的东西吗?我在这里缺少什么?

#include<string>
#include<list>
#include<iostream>
using namespace std;

int main() {
      string s = "Mark";
      list<string> l  {"name of the guy"," is Mark"};
      cout<<s<<endl;
      int size = sizeof(l)/sizeof(l[0]);
      for (int i=0;i<size;i++) {
             cout<<l[i]<<endl;
      }
      return 0;
 }

I / O是

 strtest.cpp:8:47: error: in C++98 ‘l’ must be initialized by constructor, not 
 by ‘{...}’
 list<string> l  {"name of the guy"," is Mark"};

4 个答案:

答案 0 :(得分:9)

如果使用gcc

,则使用c ++ 98而不是c ++ 11的编译器
g++ -std=c++11 -o strtest strtest.cpp

您可以将 c ++ 11 替换为 gnu ++ 11

答案 1 :(得分:9)

列表初始化程序仅在C ++ 11中可用。要使用C ++ 11,您可能必须将标志传递给编译器。对于GCC和Clang,这是-std=c++11

此外,std::list不提供下标运算符。您可以使用另一个答案中的std::vector,也可以使用基于范围的for循环遍历列表。

更多提示:

#include <string>
#include <list>
#include <iostream>

int main() {
  std::string s = "Mark";
  std::list<std::string> l {"name of the guy"," is Mark"};

  for (auto const& n : l)
    std::cout << n << '\n';
}

答案 2 :(得分:0)

这里最大的问题是你正在使用列表。在C ++中,列表是双向链表,因此[]没有任何意义。你应该使用向量。

我试试:

#include<string>
#include<vector>
#include<iostream>
using namespace std;

int main() {
      string s = "Mark";
      vector<string> l = {"name of the guy"," is Mark"};
      cout<<s<<endl;
      for (int i=0;i<l.size();i++) {
             cout<<l[i]<<endl;
      }
      return 0;
 }

代替

编辑:正如其他人指出的那样,确保使用c ++ 11而不是c ++ 98进行编译

答案 3 :(得分:0)

这个问题的答案就是将一个列表的内容简单地复制到另一个列表中,希望对它有帮助:)