STL中有dereference_iterator吗?
我想知道 STL 中是否有一个迭代器在返回指向的对象之前取消引用该对象。 当操作容器聚合指针时,这可能非常有用。 这是我希望能够做的一个示例:
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
vector<int*> vec;
int i = 1;
int j = 2;
int k = 3;
vec.push_back(&i);
vec.push_back(&j);
vec.push_back(&k);
copy(deref_iterator(vec.begin()),
deref_iterator(vec.end()),
ostream_iterator<int>(cout, " ")); // prints "1 2 3"
return 0;
}
I was wondering if there is an iterator in the STL that dereferences the object pointed before returning it. This could be very useful when manipulating containers aggregating pointers. Here's an example of what I would like to be able to do:
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
vector<int*> vec;
int i = 1;
int j = 2;
int k = 3;
vec.push_back(&i);
vec.push_back(&j);
vec.push_back(&k);
copy(deref_iterator(vec.begin()),
deref_iterator(vec.end()),
ostream_iterator<int>(cout, " ")); // prints "1 2 3"
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
尝试 Boost 的
indirect_iterator
。indirect_iterator
与它所包装的迭代器具有相同的类别。 例如,indirect_iterator
是随机访问迭代器。Try Boost's
indirect_iterator
.An
indirect_iterator
has the same category as the iterator it is wrapping. For example, anindirect_iterator<int**>
is a random access iterator.假设您的实际用例比整数指针的容器更复杂一些!
您可以查看 boost ptr 容器
http://www.boost.org/doc/ libs/1_35_0/libs/ptr_container/doc/reference.html
容器包含动态分配的对象(即指针)。
但是对对象的所有访问(直接或通过迭代器)都会返回对该对象的引用。
Assuming your actual use case is a bit more complex than a container of integer pointers!
You could check out the boost ptr containers
http://www.boost.org/doc/libs/1_35_0/libs/ptr_container/doc/reference.html
The containers contain dynamically allocated objects (ie pointers).
But all access to the objects (direct or via iterator) returns a reference to the object.
如果无法使用 Boost,那么编写自定义迭代器并不难。 以下是满足 InputIterator 要求的“取消引用迭代器”的示例:
If it is impossible using Boost, writing a custom iterator is not that hard. Here is an example of a "dereference iterator" that meets the InputIterator requirements :