通过指针迭代向量

时间:2014-04-29 23:14:19

标签: c++ pointers vector iteration

我目前正在编写一些迭代遍历向量的代码,并为该向量中的每个元素调用一个简单的print方法;但是,我对向量的经验非常有限,而且我在编译器接受这一段特定代码段时遇到了一些问题:

std::vector<Buyer *>:: iterator it;
    Buyer *b;
    for(it = buyers->begin(); it != buyers->end(); ++it)    {
            b = *it;
            cout << b->getName();
    }

其中买家是包含买家指针的向量。我更倾向于为此目的使用数组,但由于我需要在这个特定点使用向量,我不确定如何迭代它并最终尝试迭代器通过。

弹出的错误信息是:

Retailer.cpp:37:17: error: base operand of ‘->’ is not a pointer
for(it = buyers->begin(); it != buyers->end(); ++it) {
             ^
Retailer.cpp:37:40: error: base operand of ‘->’ is not a pointer
for(it = buyers->begin(); it != buyers->end(); ++it) {

根据我的理解,在那个混乱的地方显然有一个指针,我没有解除引用,但我不确定哪个元素是哪个或哪个我应该取消引用它...任何对于那些对c ++ vector / iterators没什么经验的程序员的想法?

2 个答案:

答案 0 :(得分:3)

您的错误是byuers不是指针,而是您编写buyers->begin()。这应该是buyers.begin()。 (当然buyers->end()也一样)。

如果使用现代c ++ 11:

,可以显着简化代码
for(Buyer* b : buyers)
{
     // do something
}

答案 1 :(得分:0)

其他答案已经解释了你的错误,但他们没有给你答案,你可能正在使用C ++ 03(因为我不确定,我会添加我自己的答案)

C ++,C ++ 03中,您需要更改:

for(it = buyers->begin(); it != buyers->end(); ++it)    {

for(it = buyers.begin(); it != buyers.end(); ++it)    {

正如其他答案中已经说过的那样,这是因为->需要一个指向它左侧的指针,但是你没有指针,你有一个对象,所以你需要使用.运营商。