gpt4 book ai didi

c++ - 扩展 vector 迭代器以满足我的需求

转载 作者:行者123 更新时间:2023-11-30 03:09:48 27 4
gpt4 key购买 nike

我的一个项目中有以下设计:

template<typename C> class B {
int numValue;
C inner;
}

template<typename C> class A {
vector<B<C>> container;
...
Iterator InsertItem(C item) {...}
}

我想要的是一种修改现有 vector 迭代器以返回迭代器的方法,该迭代器将在取消引用时返回 &inner 而不是返回对 B 对象的引用。希望它不需要一个完整的迭代器类实现。

最佳答案

这样的迭代器是Boost.TransformIterator

Example(填自己的代码,并不是说设计的特别好)。

#include <vector>
#include <iostream>
#include <functional>
#include <boost/iterator/transform_iterator.hpp>
using namespace std;

template<typename C> struct B {
int numValue;
C inner;
};

template <class T>
struct get_inner: std::unary_function<B<T>&, T&>
{
T& operator()(B<T>& value) const { return value.inner; }
};

template<typename C> struct A {
vector<B<C> > container;
typedef boost::transform_iterator<get_inner<C>, typename vector<B<C> >::iterator> Iterator;
Iterator InsertItem(C item) {
B<C> b = {0, item};
container.push_back(b);
return Iterator(--container.end());
}
};

int main()
{
A<double> a;
A<double>::Iterator it = a.InsertItem(3.14);
std::cout << *it << '\n';
}

关于c++ - 扩展 vector 迭代器以满足我的需求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3814727/

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