0
迭代結構向量時訪問結構成員我想訪問Line結構的token_list中的「line_number」。爲什麼token_line_number = line.token_list[i+i].line_number;
返回'1'而不是'2'?我包含了兩種不同的方法,我可以使用'2',但我想說明爲什麼我的第一個代碼片段返回'1'。如何使用vector :: operator []
#include <string>
#include <vector>
int main()
{
struct Token
{
std::string text;
int line_number;
};
struct Line
{
std::vector<Token> token_list;
};
Token token;
Line line;
token.text = "A";
token.line_number = 1;
line.token_list.push_back(token);
token.text = "B";
token.line_number = 2;
line.token_list.push_back(token);
int token_line_number = 0;
int i = 0;
if (i + 1 < line.token_list.size())
{
token_line_number = line.token_list[i+i].line_number; // <-- I want this to be '2'. Instead it is '1'.
Token token = line.token_list[i+1];
token_line_number = token.line_number; // This is '2'.
}
token_line_number = 0;
std::vector<Token>::const_iterator iter;
if (iter + 1 != line.token_list.end())
token_line_number = (iter + 1)->line_number; // This is '2'.
}
哦,天哪,我很抱歉。我一直盯着這個這麼久,我沒有注意到它不是i + 1。那很愚蠢。謝謝您的幫助! –
@ Macbeth'sEnigma爲什麼不使用++ i,然後再丟掉+1?或者,更好的是,如果你在C++ 11上,爲什麼不用(const auto&token:line.token_list)? – em70
@emaster我簡化了代碼。在我們的應用程序中,我們需要在下一個標記中「向前看」,同時仍然跟蹤當前標記,因此不需要++ i的副作用。我們使用MSVS 2010,因此沒有完整的C++ 11。我不確定自動是否可用。我使用[]是因爲實際的應用程序使用指針與迭代器。我真正的問題(真正的)是我需要一個新的處方。 :) –