什么时候在C ++对中使用点和箭头运算符?

时间:2018-08-10 04:24:58

标签: c++ stl

我为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 个元素的数组。

1 个答案:

答案 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;
}

我不知道您的代码中有scfc是什么。也许这是firstsecond的别名?