使用迭代器访问元素

时间:2016-06-15 17:44:28

标签: c++ vector iterator

考虑以下代码:

#include <vector>
#include <iostream>
class num{
  int a;
  int b;

    public:
        num(int a_, int b_): a(a_), b(b_){}
        int Geta(){return a;}
        int Getb(){return b;}

};

int main(){
    num a(2, 5);
    num b(32, 654);
    std::vector<num> nums;
    nums.push_back(a);
    nums.push_back(b);
    std::vector<num>::iterator iter = nums.begin();
    std::cout << iter->Geta()<< " " <<(*iter).Getb() << std::endl;
    return 0;
}

这样可行,但我不知道使用迭代器iter->(*iter)访问数组元素的方法更好。

我认为这个例子是两个都有效的特例。你能给我一个代码,可以看到差异(以及为什么)?

3 个答案:

答案 0 :(得分:1)

一个可以产生真正差异的例子,就是你在迭代指针时,如下所示:

std::vector<num*> nums;
for (auto it = nums.begin(); it != nums.end(); it++) {
    (*it)->getA();
}

我不知道如何仅使用->来完成此任务。

答案 1 :(得分:1)

使用C ++ 11功能,我们还可以使用基于范围的for循环来访问元素,如下例所示。

var mydate = new Date(); mydate.setHours(3); mydate.setMinutes(0);
fecha.format(mydate, 'h:mm');

答案 2 :(得分:0)

  1. ->用于通过pointer访问对象成员变量和方法。

  2. .用于通过对象instance访问对象成员变量和方法。

  3. 但容器迭代器就像指向某些数据结构的指针一样,在我看来(1.)更方便使用。

    如果你有指针向量,你需要注意你有指针(迭代器)到指针(向量元素)并使用这种语法(*iter)->Geta();