如何在使用vector::operator[]迭代结构的向量时访问结构成员
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]
。
相关文章:
- C++结构编译器错误询问向量的迭代器
- 如何使用迭代器指向结构体c++的向量
- 在VS 2017中,朋友通过具有私有析构函数的结构的unique_ptr向量进行迭代失败
- 迭代结构中包含的向量
- 为结构的向量创建C 矢量迭代器
- 是否有一个很好的方法可以在C 11中打印出像JSON一样的Trie结构(仅迭代解决方案)的扁平命名空间
- 有没有办法迭代不完整的结构
- 用于隐藏结构细节的迭代器适配器
- 在 stl 中迭代结构类型的队列
- 无法迭代结构"string"的哈希映射:[列表] C++
- Boost Intervocess:通过迭代通过从结构引用对象的映射进行迭代时
- 如何从数据结构的向量中收集迭代器
- 当迭代器添加到添加到列表向量的结构时,迭代器停止指向值?
- 使用POCO迭代JSON结构
- 是否值得两次通过文件进行迭代,以创建最小的数据结构
- 创建自定义迭代器结构以与CSTDIO一起使用
- 在编译时使用模板在跨结构字段中迭代
- 正在取消引用自定义结构字段的迭代器
- 使用C预处理器在结构字段上进行迭代
- 如何列出向量中存储的结构迭代次数