如何利用模板函数和迭代器输出vector中的数据?

drossy 2008-10-17 09:45:09
目标是利用模板函数和迭代器输出vector中的数据
//模板函数如下
template<typename T>
void PrintVecotrElements(const vector<T>& vt)
{
typename vector<T>::iterator iter;
for(iter=vt.begin();iter<vt.end();iter++)
{
cout<<*iter<<endl;
}
}
//调用方式如下
vecotr<int> v(10,0);
PrintVecotrElements(v);

编译提示在for循环的第一个赋值语句出错,信息如下:
no match for 'operator=' in 'iter=((const std::vector<int,std::allocator<int> >*)v)->std:vector<_Tp,_Alloc>::begin [with _Tp=int,_Alloc=std::allocator<int>]()'。

但是如果for循环中使用for(int i=0;i<v.size();i++)的形式就没问题,盼望高人解答!
...全文
310 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
drossy 2008-10-17
  • 打赏
  • 举报
回复
高手,一语中的
herman~~ 2008-10-17
  • 打赏
  • 举报
回复
#include <iostream> template <typename T> void PrintVecotrElements( vector <T>& vt) { vector <T>::iterator iter; for(iter=vt.begin();iter !=vt.end();iter++) { cout <<*iter <<endl; } } void main() { vector <int> v(10,0); PrintVecotrElements(v); }

geniuscaobo 2008-10-17
  • 打赏
  • 举报
回复
vector<T>::const_iterator iter;
Vegertar 2008-10-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xmm985326 的回复:]
typename vector <T>::iterator iter;
这个错了,去掉前面的typename
你这个做法是表示把vector <T>::iterator取一个别名叫iter
或者改成
for( iter it = vt.begin(); it != vt.end(); ++it)
{
//...
}
[/Quote]

要加typename, 因为编译器对于模板类的成员默认为对象而不是类型.
wuyu637 2008-10-17
  • 打赏
  • 举报
回复

#include <iostream>
template <typename T>
void PrintVecotrElements( vector <T>& vt)
{
vector <T>::iterator iter;
for(iter=vt.begin();iter !=vt.end();iter++)
{
cout <<*iter <<endl;
}
}


void main()
{
vector <int> v(10,0);
PrintVecotrElements(v);

}
微甜呼吸 2008-10-17
  • 打赏
  • 举报
回复
typename vector <T>::iterator iter;
这个错了,去掉前面的typename
你这个做法是表示把vector <T>::iterator取一个别名叫iter
或者改成
for( iter it = vt.begin(); it != vt.end(); ++it)
{
//...
}
Vegertar 2008-10-17
  • 打赏
  • 举报
回复
一楼的方法更好.
Vegertar 2008-10-17
  • 打赏
  • 举报
回复

参数值传递:

#include <iostream>
#include <vector>

using namespace std;

template <typename T>
void PrintVecotrElements(vector <T> vt)
{
typename vector <T>::iterator iter;
for(iter = vt.begin(); iter != vt.end(); iter++)
{
cout << *iter << endl;
}
}

int main() {
//调用方式如下
vector <int> v(10,0);
PrintVecotrElements(v);
}

chlaws 2008-10-17
  • 打赏
  • 举报
回复
你这容器对象是const 那么你迭代器就用const_iterator 就是了嘛

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧