c++ - 何时在 C++ 对中使用点和箭头运算符?
问题描述
我在 C++ STL 中为向量编写了以下代码:
vector<pair< int,pair<int,int>> > v;
vector<pair< int,pair<int,int>> >::iterator it;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
v.push_back(make_pair(a[i]+a[j],pair<int,int>(i,j)));
for(it=v.begin();it!=v.end();it++)
cout<<(it->first)<<(it->second.first);
这段代码没有问题。有用。我想知道的是为什么我们使用箭头运算符来访问向量对和点运算符来访问对内的对?
我怎么能自信地知道什么时候使用什么。这里的逻辑是什么?
PS:a是一些具有n 个元素的数组。
解决方案
在下面的代码示例中,it
是您在顶部声明的类型iterator
。
for(it=v.begin();it!=v.end();it++)
cout << it->first << it->second.first;
vector::iterator
是一个类,其中箭头运算符被重载以返回对您正在循环的向量中的项目的引用。这就是迭代器的工作方式。
如果您想要更传统的“点”运算符迭代,这就足够了:
for(size_t i = 0; i < v.size(); i++)
{
cout<<(v[i].first) << (v[i].second.first);
}
甚至更好:
for (auto &item : v)
{
std::cout << item.first << item.second.first;
}
我不知道你sc
的fc
代码中有什么。也许这是first
and的别名second
?
推荐阅读
- ruby-on-rails - 将数据迁移到新实例 3.2 -> 4.0 后 Redmine 500 错误
- azure-iot-edge - 如何在 azure itoedge 环境变量中获取 docker 主机名
- php - 使用 eloquent 从 laravel 中的选择中插入
- r - 在 for 循环中添加元素或拆分字符串时,有没有办法在 R 中创建普通列表?'不是列表列表'
- node.js - 从Mongodb获取后,Nodejs更改日期类型的时间
- java - 为什么 do while 循环会忽略我的字符串输入,但是当我将其更改为整数输入时它起作用了
- api - Gitlab API:通过标签名称从提交中获取文件
- python - 无法加载库“C:\Program Files\R\R-4.1.in”:错误 0x7e
- asp.net-core - 我想在扩展方法中使用 UseEndPoints
- html - div 图像外部不可见的东西阻止鼠标悬停在另一个图像上