c++ 迭代器问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 迭代器问题相关的知识,希望对你有一定的参考价值。

解释一下这个程序代码,先谢了!!!
#include<vector>
#include<iostream>
using namespace std;

template<class T>
typename iterator_traits<T>::value_type
sum(T beg,T end)

typedef typename iterator_traits<T>::value_type val_type;
val_type s(val_type(0));
T iter;
for(iter=beg;iter!=end;++iter)
s+=*iter;
return s;

int main()

int a[]=1,2,3,4,5,6,7,8,9,10;
size_t n=sizeof(a)/sizeof(*a);
int as=sum(a,a+n);
cout<<as<<endl;
vector<int>v(a,a+n);
int ns=sum(v.begin(),v.end());
cout<<ns<<endl;

这个程序怎么向里面传迭代器也行呀,明明是定义了一个类型名,怎么也可以当迭代器用呀!!
我没有分数了,所以没有悬赏分了呀!!!
typedef typename iterator_traits<T>::value_type val_type;
val_type s(val_type(0));

如果传迭代器的话,通过上面的代码可以知道是什么类型的迭代器,
但是,如果传指针的话怎么还可以用这个知道指针式指向什么类型的呢
typename iterator_traits<T>::value_type
不是针对迭代器的吗

参考技术A 明明是定义了一个类??

你哪有定义类啊

template<class T>是定义一个类型名
写成template<typename T>更容易懂

v.begin()是什么类型啊,iterator类型,所以你的T是iterator

typedef typename iterator_traits<T>::value_type val_type这个
定义了一个val_type类型,
然后val_type s(val_type(0));定义了一个val_type类型的变量s
s由val_type(0)来拷贝构造
参考技术B 标准库中的 iterator_traits<> 对指针专门有类型推导定义:

template<class _Ty>
struct iterator_traits<_Ty *>
// get traits from pointer
typedef random_access_iterator_tag iterator_category;
typedef _Ty value_type;
typedef ptrdiff_t difference_type;
typedef ptrdiff_t distance_type; // retained
typedef _Ty *pointer;
typedef _Ty& reference;
;

以上取自 VC 的标准库实现,可清楚的看到指针类型是如何包装为迭代器的本回答被提问者采纳

c++中的泛型迭代器

【中文标题】c++中的泛型迭代器【英文标题】:Generic iterator in c++ 【发布时间】:2012-09-08 16:33:51 【问题描述】:

我正忙于一个项目,想知道type T 数组的通用迭代器类是什么以及如何编写一个。我在书籍和网站上看过,但我找不到任何东西。请帮忙。但是不要给我写代码。

【问题讨论】:

应该符合RandomAccessIterator concept。 【参考方案1】:

可能是一个具有一元运算符*++ 和可能定义的-- 的类,其中第一个返回对底层T 对象的引用,第二个将迭代器推进到下一个元素容器,最后一个将迭代器向后推进。

或者,如果您使用一些标准容器,只需返回 yourContainer.begin()yourContainer.find() 的值。

如果您详细说明您的问题,您可以获得更好的答案。例如,您使用的是什么容器?什么是通用迭代器?

【讨论】:

是泛型向量还是模板相关?

以上是关于c++ 迭代器问题的主要内容,如果未能解决你的问题,请参考以下文章

C++:为啥输出迭代器不支持比较操作?

C++ 迭代器:实现迭代器类时出错

C++迭代器 iterator

C++迭代器 iterator

深入理解C++迭代器:让你的C++代码更加灵活

c++ 迭代器库