vector:erase()和rbegin() [英] vector: erase() and 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
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屋!