【问题标题】:C++ STL List IteratorC++ STL 列表迭代器
【发布时间】:2012-07-26 23:23:50
【问题描述】:

我正在尝试使用以下代码遍历字符串列表:

#include<cstdlib>
#include<string>
#include<list>

using namespace std;

list<string> dict = {"aardvark", "ambulance", "canticle", "consumerism"};
list<string> bWords = {"bathos", "balderdash"};
//splice the bWords list into the appropriate spot in dict
auto iterLastB = --(bWords.end());
//find spot in dict
list<string>::iterator it = dict.begin();
while(it != dict.end()){
  if(*it > *iterLastB)
    break;
    ++it;
}
dict.splice(it, bWords);

但是,在构建它时,我收到错误 expected unqualified-id before 'while' 这是什么意思,我该如何解决这个问题?

【问题讨论】:

    标签: c++ list stl compiler-errors iterator


    【解决方案1】:

    您不能像那样直接编写代码。至少你需要一个main 函数。您可能应该在 main 函数中添加所有内容(包含除外)。

    【讨论】:

    • 我觉得奇怪的是 OP 如何编写上面的代码却忘记了main
    • @JesseGood 是的,我注意到了。它看起来像惯用的 C++。
    • 我看到学生习惯于过多使用cint,但他们大多不会写出好的惯用c++。
    • @dmckee 我第一次听说 cint。纯真棒:-)
    【解决方案2】:

    您缺少int main() 函数。 C++ 根本不允许将静态变量和声明以外的代码放在函数之外,因为不清楚代码应该何时实际运行。

    一些注意事项:不要使用--(container.end()),当end 是原始类型时,这可能会导致未定义的行为。使用std::prev(container.end())。尝试使用beginend 的免费功能,例如end(container)。不要在不必要时使用 while 循环进行迭代。使用for(auto&amp; x : container)for(auto it = begin(container); it != end(container); ++it)。更好的是:使用标头 algorithm 中的算法。

    【讨论】:

      猜你喜欢
      • 2012-11-05
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 2014-08-13
      • 2018-01-07
      相关资源
      最近更新 更多