vector:erase()和rbegin() [英] vector: erase() and rbegin()

查看:411
本文介绍了vector:erase()和rbegin()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

矢量< INT> v;


erase()需要(作为输入参数)并返回vector< int> :: iterator,

rbegin()返回vector< int>: :reverse_iterator。


所以,编译器不接受v.erase(v.rbegin())。

我们是否必须写v。擦除(v.end() - 1)?或者还有其他什么?


-

Alex Vinokur

电子邮件:alex DOT vinokur AT gmail DOT com http://mathforum.org/library/view/10978.html
http://sourceforge.net/users/alexvn

vector<int> v;

erase() requires (as input parameter) and returns vector<int>::iterator,
rbegin() returns vector<int>::reverse_iterator.

So, a compiler doesn''t accept v.erase(v.rbegin()).
Do we have to write v.erase(v.end() - 1)? Or there exists something else?

--
Alex Vinokur
email: alex DOT vinokur AT gmail DOT com
http://mathforum.org/library/view/10978.html
http://sourceforge.net/users/alexvn

推荐答案



" Alex Vinokur" <人**** @ big-foot.com>在消息中写道

news:2u ************* @ uni-berlin.de ...

"Alex Vinokur" <al****@big-foot.com> wrote in message
news:2u*************@uni-berlin.de...
vector< int> v;

erase()需要(作为输入参数)并返回vector< int> :: iterator,
rbegin()returnsvectorintreverse_iterator。

所以,编译器不接受v.erase(v.rbegin())。
我们必须写
ev.eraseOrthereexistssomethingelse
vector<int> v;

erase() requires (as input parameter) and returns vector<int>::iterator,
rbegin() returnsvectorintreverse_iterator.

So, a compiler doesn''t accept v.erase(v.rbegin()).
Do we have to writ
ev.eraseOrthereexistssomethingelse




reverse_iterators有一个名为base()的成员函数,它返回

等效迭代器。使用它。


john



reverse_iterators have a member function called base() which returns the
equivalent iterator. Use that.

john




" John Harrison" <乔************* @ hotmail.com>在留言新闻中写道:2u ************* @ uni-berlin.de ...

"John Harrison" <jo*************@hotmail.com> wrote in message news:2u*************@uni-berlin.de...

Alex Vinokur <人**** @ big-foot.com>在消息中写道
新闻:2u ************* @ uni-berlin.de ...

"Alex Vinokur" <al****@big-foot.com> wrote in message
news:2u*************@uni-berlin.de...
vector< int> v;

erase()需要(作为输入参数)并返回vector< int> :: iterator,
rbegin()returnsvectorintreverse_iterator。

所以,编译器不接受v.erase(v.rbegin())。
我们必须写
ev.eraseOrthereexistssomethingelse
vector<int> v;

erase() requires (as input parameter) and returns vector<int>::iterator,
rbegin() returnsvectorintreverse_iterator.

So, a compiler doesn''t accept v.erase(v.rbegin()).
Do we have to writ
ev.eraseOrthereexistssomethingelse



reverse_iterators有一个名为的成员函数base()返回
等效迭代器。使用它。

john



reverse_iterators have a member function called base() which returns the
equivalent iterator. Use that.

john




我有


断言 assert((* v.rbegin())==(* v.rbegin()。base()))"失败

-

Alex Vinokur

电子邮件:alex DOT vinokur AT gmail DOT com
http://mathforum.org/library/view/10978.html
http://sourceforge.net/users/alexvn



I have got

assertion "assert ((*v.rbegin()) == (*v.rbegin().base()))" failed
--
Alex Vinokur
email: alex DOT vinokur AT gmail DOT com
http://mathforum.org/library/view/10978.html
http://sourceforge.net/users/alexvn


John Harrison写道:
John Harrison wrote:
" Alex Vinokur" <人**** @ big-foot.com>在消息中写道
新闻:2u ************* @ uni-berlin.de ...
"Alex Vinokur" <al****@big-foot.com> wrote in message
news:2u*************@uni-berlin.de...
vector< int> v;

erase()需要(作为输入参数)并返回vector< int> :: iterator,
rbegin()returnsvectorintreverse_iterator。

所以,编译器不接受v.erase(v.rbegin())。
我们必须写
ev.eraseOrthereexistssomethingelse
vector<int> v;

erase() requires (as input parameter) and returns vector<int>::iterator,
rbegin() returnsvectorintreverse_iterator.

So, a compiler doesn''t accept v.erase(v.rbegin()).
Do we have to writ
ev.eraseOrthereexistssomethingelse



reverse_iterators有一个成员函数调用base()返回
等效迭代器。使用它。

john


reverse_iterators have a member function called base() which returns the
equivalent iterator. Use that.

john



来自TC ++ PL 3:

"使用名为current的迭代器实现reverse_iterator 。

迭代器可以(仅)指向其序列的元素加上它的

一个过去的元素。但是,reverse_iterator?s
一个过去的元素是原始序列?(无法访问)

一个在开头之前的元素。 />

因此,为了避免访问冲突,当前指向

之后的元素是reverse_iterator所指的那个。这意味着*返回

值*(current-1),而++是使用 - on current实现的。


换句话说reverse_iterator的base()在常规

迭代器的观点下,返回current,这是一个在reverse_iterator指向的元素后面的


因此,如果你想用reverse_iterator指向相同的元素,

,前提是reverse_iterator没有指向一个结束时

元素的视图,你可以例如:

vector< int> :: reverse_iterator rp = whatever;

//不能用于指向一个结束的的reverse_iterator

//元素在它的观点下。

vector< int> :: iterator p = rp.base() - 1;


-

Ioannis Vranos

http://www23.brinkster.com/noicys


这篇关于vector:erase()和rbegin()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆