2 zhaoyading zhaoyading 于 2014.12.06 16:05 提问

关于标准库vector的使用

在标准库容器vector中,这样是正确的:
vectorvc;
vector::iterator iter;
iter=vc.begin();
iter++;//此时正确
但是下面这样是错误的:
vectorvc;
vc.begin()++//此时错误

为什么不能直接vc.begin()++呢?

3个回答

devmiao
devmiao   Ds   Rxr 2014.12.06 18:06

vc.begin()++被编译成
vc.begin() = vc.begin() + 1;
或者说
vector::iterator iter;
iter = vc.begin();
iter = vc.begin() + 1;
那么事实上vc.begin()被调用了两次。

eagleyan
eagleyan   Rxr 2014.12.07 13:51

这里iterator的++是重载操作符,不是一般的变量的自增量。类似下面这样,

const_noconst_iterator operator++(int){
// Use operator++()
const const_noconst_iterator old(*this);
++(*this);
return old;
}

xianfajushi
xianfajushi   2014.12.06 16:47

std::vectorcharvector;
charvector.push_back('T');
charvector.push_back('H');
charvector.push_back('E');
charvector.push_back('R');
charvector.push_back('E');
charvector.push_back(' ');
charvector.push_back('H');
charvector.push_back('I');
charvector.push_back(' ');

for_each(charvector.begin(), charvector.end(), show_valch);

rotate(++charvector.begin(), charvector.begin() + 6, charvector.end());

rotate(charvector.begin()++, charvector.begin() + 6, charvector.end());

正确

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!