我重载了operator <<来打印向量中的所有元素,但它不起作用?

问题描述 投票:0回答:2

我正在为项目的矢量指针工作,但我无法打印向量中的所有元素。我试过运算符重载,但它不正确:

vector<list<int*>*> *v = new vector<list<int*>*> { 
    new list<int*> {new int(2), new int (7)}, 
    new list<int*> {new int(2), new int (7)}
};

for (int i = 0; i < v->size(); i++) {
    auto a = v[i].begin();
    while (a != v[i].end()) {
        cout << **a;
        a++;
    }
}
c++ pointers vector operator-overloading
2个回答
3
投票

试试这个:

for(const auto& i : *v)
    for(const auto& j: *i)
        cout<<*j<<" ";

是否有理由使用这么多指针?你的代码可以更加简单:

   vector<list<int>> v {
   list<int> {2, 7},
   list<int> {2, 7}
};

for(const auto& i : v)
    for(const auto& j: i)
        cout<<j<<" ";

0
投票

只是有太多的指针,但要以与你所做的相同的方式正确地重写你的代码,试试这个

for (int i = 0; i < v->size(); i++) {
    auto a = (*v)[i]->begin();
    while (a != (*v)[i]->end()) {
        cout << **a;
        a++;
    }
}

因为v是一个指向矢量的指针,所以你必须编写(*v)[i]来从矢量中获取一个元素。然后,因为该元素本身是一个指向列表的指针,所以你必须编写->begin()来获取列表迭代器。

没有这么多指针就可以编写程序。

© www.soinside.com 2019 - 2024. All rights reserved.