我为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 个元素的数组。
答案 0 :(得分:4)
在下面的代码示例中,您声明为最高的it
类型为iterator
。
for(it=v.begin();it!=v.end();it++)
cout << it->first << it->second.first;
vector::iterator
是一个类,其中箭头运算符被重载以返回 reference 到您要遍历的向量中的项目。迭代器就是这样工作的。
如果您想使用更传统的“点”运算符迭代,就足够了:
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
和second
的别名?