首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >整数向量的迭代器

整数向量的迭代器
EN

Stack Overflow用户
提问于 2022-04-25 08:57:09
回答 1查看 52关注 0票数 0

在下面的代码中有一个错误,我希望在每个子向量中打印第一个元素:

代码语言:javascript
运行
复制
vector<vector<int>> logs{{0, 0}, {1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}};
for (auto beg = logs.begin(); beg != logs.end(); beg++) {
    cout << *beg[0] << endl;
}

错误来自cout << *beg[0]...

代码语言:javascript
运行
复制
Indirection requires pointer operand ('std::vector<int, std::allocator<int>>' invalid)

所以我的问题是:迭代器的引用应该是向量"logs“中的一个子向量,所以我使用下标来访问它的第一个元素。为什么有一个std::vector<int, std::allocator<int>>对象?std::allocator<int>从何而来?如何访问子向量中的元素?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-25 09:01:49

problem(导致上述错误的原因)是,由于运算符优先,表达式*beg[0]被分组为(或等效于):

代码语言:javascript
运行
复制
*(beg[0])

它不能工作,因为beg是一个迭代器,没有[]运算符。这是因为运算符[]比运算符*具有更高的优先级。

若要解决此问题,请将cout << *beg[0] << endl;替换为:

代码语言:javascript
运行
复制
cout << (*beg)[0] << endl;  //or use beg->at(0)

演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71996867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档