2012-07-26 234 views
1

我試圖通過與下面的代碼字符串列表進行迭代:C++ STL列表迭代器

#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' 這是什麼意思,我該如何解決問題?

回答

8

你不能直接寫代碼那樣。至少你需要一個main函數。您應該可以在main函數中添加所有內容(包括除外)。

+4

我發現OP如何編寫像上面這樣的代碼,並忘記'main',這讓人感到很奇怪。 – 2012-07-26 23:27:51

+0

@JesseGood是的,我注意到了。它看起來像慣用的C++。 – cnicutar 2012-07-26 23:28:34

+1

我見過學生們習慣這樣做,如果他們太多地使用'cint',但他們大多不會寫出很好的慣用C++。 – dmckee 2012-07-26 23:30:48

1

你缺少一個int main()功能。 C++根本不允許將靜態變量和聲明以外的代碼放在函數之外,因爲代碼實際運行的時間並不明確。

一些注意事項:不要使用--(container.end()),當end是原始類型時,最終可能會導致未定義的行爲。使用std::prev(container.end())。嘗試使用beginend免費功能,例如end(container)。當不必要時,不要迭代while循環。使用for(auto& x : container)for(auto it = begin(container); it != end(container); ++it)。更好的是:使用頭文件algorithm中的算法。