[英]How to access a struct member when iterating a vector of structs with vector::operator[]
我想访问Line结构的token_list中的“ line_number”。 为什么token_line_number = line.token_list[i+i].line_number;
返回“ 1”而不是“ 2”? 我包括两种不同的获取“ 2”的方法,但是我想理解为什么我的第一个代码片段返回“ 1”。
#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
的值,因此它为0
:
int i = 0;
if ( i + 1 < line.token_list.size() )
{
token_line_number = line.token_list[i+i].line_number; // i has not been changed from 0
记住0+0
是0
。 所以line.token_list[i+i]
是line.token_list[0]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.