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
不是针对迭代器的吗
你哪有定义类啊
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++ 迭代器问题的主要内容,如果未能解决你的问题,请参考以下文章