gpt4 book ai didi

c++ - 有没有一种方法可以使用基于范围的迭代器来迭代对指针列表值的引用?

转载 作者:太空狗 更新时间:2023-10-29 23:29:45 24 4
gpt4 key购买 nike

因此,如果我有以下 vector ,其中包含多个指向整数的指针:

std::vector<MyClass*> list;

我可以稍后使用类似的方法对其进行迭代吗:

for (auto & (*item) : list)
{
item.member = something; //Goal is to require no dereferencing here
}

使用对列表内容值的引用比使用指向它们的指针要方便一些。

最佳答案

不,你不能。但你为什么要这么做?

for (auto pitem : list)
{
auto& item = *pitem;
item.member = something; // no dereferencing here
}

除非你愿意编写像这样乏味的代码:

template<class TPointer>
class Adaptor
{
struct Iterator
{
TPointer* _p;
Iterator(TPointer* p) : _p(p) {}

typename std::remove_pointer<TPointer>::type& operator*() { return **_p; }
Iterator& operator++() { ++_p; return *this; }
friend Iterator operator+(const Iterator& lhs, size_t s) { return lhs._p + s; }
friend bool operator!=(const Iterator& lhs, const Iterator& rhs) { return lhs._p != rhs._p; }
};

std::vector<TPointer>& _v;
public:
Adaptor(std::vector<TPointer>& v) : _v(v) {}
Iterator begin() { return &_v[0]; }
Iterator end() { return begin() + _v.size(); }
};

只有这样你才能写:

struct SomeData { int n; } s1{2}, s2{4};
std::vector<SomeData*> data{&s1, &s2};

for (auto& item : Adaptor{data}) {
std::cout << item.n << "\n";
}

live demo

关于c++ - 有没有一种方法可以使用基于范围的迭代器来迭代对指针列表值的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48303351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com