2013-10-17 110 views
2
#include <iostream> 
#include <vector> 
#include <string> 

using namespace std; 

int main() 
{ 
    vector<string> a; 
    a.push_back("1 1 2 4"); 
    a.push_back("2 3 3 3"); 
    a.push_back("2 2 3 5"); 
    a.push_back("3 3 3 3"); 
    a.push_back("1 2 3 4"); 
    for (int i=0;i<a.size();i++) 
     for(int j=0;j<a[i].length();j++) 
      cout<<a[i].at[j]; 
    return 0; 
} 
的迭代

嗨,當我運行上面的代碼中,有一個錯誤如下:C++:矢量<string>

error C2109: subscript requires array or pointer type 

請幫助我,告訴我爲什麼,謝謝!

+4

用圓括號調用'at':'at(j)' – juanchopanza

+3

或者根本不使用'at'。我從來沒有發現它的語義是合適的(特別是使用'std :: string')的情況。 –

+0

@JamesKanze:有了vector,'at()'有用,而且是必要的。 – Nawaz

回答

7

at是一個函數,需要與()[]

更新被稱爲

cout<<a[i].at[j]; 
//   ^^^ 

a[i].at(j) 
// ^^^^^ 

要輸出string,你不需要cout每個字符,只要做

for (int i=0; i<a.size(); i++) 
{ 
    std::cout << a[i] << "\n"; 
} 
std::cout << std::endl; 

或者,如果C++ 11:

for(auto const & s : a) 
{ 
    cout << s << "\n"; 
} 
0

更易於使用,基於範圍語句。例如:

for (const std::string &s : a) 
{ 
    for (char c : s) std::cout << c; 
    std::cout << std::endl; 
}