首页 > 解决方案 > 何时在 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 个元素的数组。

标签: c++stl

解决方案


在下面的代码示例中,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;
}

我不知道你scfc代码中有什么。也许这是firstand的别名second


推荐阅读