如何在使用vector::operator[]迭代结构的向量时访问结构成员

How to access a struct member when iterating a vector of structs with vector::operator[]

本文关键字:结构 迭代 向量 成员 访问 operator vector      更新时间:2023-10-16

我想访问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]