问题描述
- 关于标准库vector的使用
-
在标准库容器vector中,这样是正确的:
vectorvc;
vector::iterator iter;
iter=vc.begin();
iter++;//此时正确
但是下面这样是错误的:
vectorvc;
vc.begin()++//此时错误为什么不能直接vc.begin()++呢?
解决方案
vc.begin()++被编译成
vc.begin() = vc.begin() + 1;
或者说
vector::iterator iter;
iter = vc.begin();
iter = vc.begin() + 1;
那么事实上vc.begin()被调用了两次。
解决方案二:
这里iterator的++是重载操作符,不是一般的变量的自增量。类似下面这样,
const_noconst_iterator operator++(int){
// Use operator++()
const const_noconst_iterator old(*this);
++(*this);
return old;
}
解决方案三:
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());
正确