标题:有关标准库vector 元素和迭代器问题!!!
只看楼主
bclee
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-9-16
 问题点数:0 回复次数:8 
有关标准库vector 元素和迭代器问题!!!
这些问题可能很简单,但是我翻了很多书,都不能找到一个确切答案,希望大家赐教!!!谢谢
第一个问题 从vector概念知道,它是同一种类型的对象的集合,就是说只要是同一类形(string,int等等)的对象都可以放到同一个VECTOR里面,定义和初始化vector对象的时候,可以创建空的vector 对象,(比如:vector<int> v1 ; ) 也可以创建确定个数元素的vector 对象( 比如 vector<int> v2(10,9);  ) 从后面那个对象看,这个容器的里面有10个为9的元素,就是说它的元素是相同的,但是按照概念说,里面的元素肯定可以不一样,那么怎么初始化一个知道具体元素的容器呢?

第二个问题 怎样用迭代器表示容器里面的某一个元素呢?比如 定义容器 vector<int> v3(19,9);定义迭代器 vector<int>::iterator iter ;怎么用这个迭代器表示出容器的第10个数呢?(vector<int>::iterator iter = v3[9] ? ) 如果是这样,还有没有其他的方法呢?
 
最后一个问题 如果迭代器找到了容器里面的满足要求的元素, 怎么返回一指向该元素的迭代器呢?(cout<< *iter <<endl; ?假如用上面定义的迭代器对象)
搜索更多相关主题的帖子: vector 元素 int 对象 定义 
2008-01-21 20:04
linsua
Rank: 1
等 级:新手上路
帖 子:275
专家分:0
注 册:2008-1-2
得分:0 
佩服楼主!向你学习!


 



1:
    比如可以这样,
int arr[]={1,2,3,4,5,6,7,8};
   vector<int> v3(arr, arr+sizeof(arr)/sizeof(int));
即:
vector<int> v3(arr, arr+8);//
或者说你有一个别的容器的话就可以:
                 vector<int> v3(v1.begin(),v1.end());//
这样比较麻烦吧,不过也没好办法了:09也就是明年C++新标准出来后就可以这样写了:
 vector<int> v4={19,8,7,6,5,4,1,5,7};//多方便啊。
2:对于vector(和deque)来说,迭代器大体上相当于指针。用迭代器表示出容器的第10个数:
vector<int>::iterator iter =v1.begin();
               *(iter+9)=XXXX;
但是其它容器如list不能这样;只能:iter++九次;
但是你用STL的话就不用考虑这么多了,只要用advance();函数就行了,STL自己会处理这些细节:
advance(iter, 9);
       *iter=XXXX;
3:不知道你说的
迭代器找到了容器里面的满足要求的元素
是什么意思。
举个例子:v4是一个vector;它里头放了{19,8,7,6,5,4,1,5,7};
vector<int>::iterator iter=find(v4.begin(),v4.end(),1);//就会返回指向1的那个迭代器.
cout<<*iter;
就会输出1;

[[italic] 本帖最后由 linsua 于 2008-1-21 22:03 编辑 [/italic]]

如果你对我的话感到再明白不过 那恐怕你是误解了我的意思
2008-01-21 21:59
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
你们在谈c++primer?我的c++(清华大学版)没讲这些东西?
2008-01-21 22:53
lypoem
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-1-19
得分:0 
学要从基础抓起~
学要从基础抓起~
2008-01-21 23:49
bclee
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-9-16
得分:0 
int arr[]={1,2,3,4,5,6,7,8};
   vector<int> v3(arr, arr+sizeof(arr)/sizeof(int));

跟int arr[]={1,2,3,4,5,6,7,8};
   vector<int> v3(arr, arr+sizeof(arr)/sizeof[0]);

有什么不同呢?
2008-01-22 10:50
bclee
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-9-16
得分:0 
多谢 linsua , 我第三问题就是你说的那样,很感谢你!!!
2008-01-22 10:52
bclee
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-9-16
得分:0 
原帖由 [bold][underline]lypoem[/underline][/bold] 于 2008-1-21 23:49 发表 [url=http://bbs.bccn.net/redirect.php?goto=findpost&pid=1185422&ptid=198238][/url]
学要从基础抓起~



我刚入门的,我想这也是基础吧??
2008-01-22 10:53
linsua
Rank: 1
等 级:新手上路
帖 子:275
专家分:0
注 册:2008-1-2
得分:0 
原帖由 [bold][underline]bclee[/underline][/bold] 于 2008-1-22 10:53 发表 [url=http://bbs.][/url]



我刚入门的,我想这也是基础吧??



对,是基础,学C++就要从STL学起。推荐一本书<C++标准程序库>(英文名是:The C++ standard Library (A Tutorial and Reference));
学C++的时候最好做几个练习,比如贪吃蛇什么的,才能学好。
对于清华出的那一系列“计算机丛书”我都无语了。

 
vector<int> v3(arr, arr+sizeof(arr)/sizeof[0]);

你是说vector<int> v3(arr, arr+sizeof(arr)/sizeof (arr[0]));吧,那是一样的,你这句编译不了。

如果你对我的话感到再明白不过 那恐怕你是误解了我的意思
2008-01-22 11:05
bclee
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-9-16
得分:0 
一样就好了,等我再看看!!谢谢
2008-01-22 11:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-198238-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021723 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved