c++ vector *iterator++的问题。。。求解答!!!!!!
#include<iostream>#include<vector>usingnamespacestd;voidprint(vector<int>::const_iter...
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int>::const_iterator beg,vector<int>::const_iterator end);
void main(){
//将 0 到 10 放到 vector 中
vector<int> v;
for(int i=0;i<10;i++){
v.push_back(i);
}
print(v.begin(),v.end()); //输出 0 1 2 3 4 5 6 7 8 9
}
void print(vector<int>::const_iterator beg,vector<int>::const_iterator end)
{
while(beg!=end){
cout<<*beg++;
// 等价与 *(beg++), beg++ 后的值应该指向第二个元素,
//输出的结果应该为 1 2 3 4 5 6 7 8 9,为什么结果为 0 1 2 3 4 5 6 7 8 9
if(beg!=end) cout<<" ";
}
cout<<endl;
} 展开
#include<vector>
using namespace std;
void print(vector<int>::const_iterator beg,vector<int>::const_iterator end);
void main(){
//将 0 到 10 放到 vector 中
vector<int> v;
for(int i=0;i<10;i++){
v.push_back(i);
}
print(v.begin(),v.end()); //输出 0 1 2 3 4 5 6 7 8 9
}
void print(vector<int>::const_iterator beg,vector<int>::const_iterator end)
{
while(beg!=end){
cout<<*beg++;
// 等价与 *(beg++), beg++ 后的值应该指向第二个元素,
//输出的结果应该为 1 2 3 4 5 6 7 8 9,为什么结果为 0 1 2 3 4 5 6 7 8 9
if(beg!=end) cout<<" ";
}
cout<<endl;
} 展开
2个回答
展开全部
首先你要知道 vector 是什么,vector是同一类型的对象的集合(容器)。
所以vector<int> v表示v是一个int类型的集合,v.push_back(i);就是将i当前值,保存到容器v中。
其次你要知道iterator 、const_iterator是什么,iterator(迭代器)是一种检查容器(vector)内元素并遍历元素的数据类型,通过迭代器可以对容器中的数据进行取值。const_iterator是迭代器的一种,只不过通过它只能读取,不能改变容器中的值。迭代器相当于下标(注意是相当于,具体内容自己去找)
所以在print函数形参中,beg和end都是只读的迭代器。
v.begin()返回容器的开始位置,v.end()返回容器的结束位置。(想像成数组)
所以这个程序的所做的操作是:将0到9放入到一个容器中,然后通过容器的迭代器(相当于指针)将这些数据取出,打印出来。
注:建议你去阅读《c++ primer》这本书很不错。希望我的答案对你理解vector和iterator会有所帮助
所以vector<int> v表示v是一个int类型的集合,v.push_back(i);就是将i当前值,保存到容器v中。
其次你要知道iterator 、const_iterator是什么,iterator(迭代器)是一种检查容器(vector)内元素并遍历元素的数据类型,通过迭代器可以对容器中的数据进行取值。const_iterator是迭代器的一种,只不过通过它只能读取,不能改变容器中的值。迭代器相当于下标(注意是相当于,具体内容自己去找)
所以在print函数形参中,beg和end都是只读的迭代器。
v.begin()返回容器的开始位置,v.end()返回容器的结束位置。(想像成数组)
所以这个程序的所做的操作是:将0到9放入到一个容器中,然后通过容器的迭代器(相当于指针)将这些数据取出,打印出来。
注:建议你去阅读《c++ primer》这本书很不错。希望我的答案对你理解vector和iterator会有所帮助
展开全部
*beg++是先取*beg,再将beg进行自加运算
追问
c++ primer 第四版 第141页中的一句:
由于后自增操作的优先级高于解引用操作,因此 *iter++ 等效与 *(iter++)
-----------------------------------------
*beg++是先取*beg,再将beg进行自加运算
*beg++ 应该是先自加,再取 * ???
追答
其实一样,i=5;i++;那么最终i=6,但i++这个表达式的结果依然是5,这个不用想到迭代器,看一下c语言书中指针的使用就可以了,要注意i++和++i的区别
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询