g*********s 发帖数: 1782 | 1 1.这个代码输出为何是0 1 10 2 4,而不是0 1 10 3 4?
#include
#include
#include
int main(){
std::vector v;
for (int i=0; i<5; i++){
v.push_back(i);
}
v.erase(std::find(v.rbegin(), v.rend(), 2).base());
v.insert(std::find(v.rbegin(), v.rend(), 1).base(), 10);
std::copy(v.begin(), v.end(), std::ostream_iterator(std::cout, " ")
);
return 0;
}
2. 这段代码里为何String s1('a')和String s1='a'不等价?
class String{
public:
explicit String(char c, int | g*********s 发帖数: 1782 | 2 另外第一个代码里为何要有find().base()? find()不是返回了iterator,然后作为参
数传递给erase/insert吗?base()是什么啊?查了半天也没找到。
【在 g*********s 的大作中提到】 : 1.这个代码输出为何是0 1 10 2 4,而不是0 1 10 3 4? : #include : #include : #include : int main(){ : std::vector v; : for (int i=0; i<5; i++){ : v.push_back(i); : } : v.erase(std::find(v.rbegin(), v.rend(), 2).base());
| q*****g 发帖数: 72 | 3 hint: it uses rbegin(), rend(), which means that it is reverse iterator.
【在 g*********s 的大作中提到】 : 另外第一个代码里为何要有find().base()? find()不是返回了iterator,然后作为参 : 数传递给erase/insert吗?base()是什么啊?查了半天也没找到。
| g*********s 发帖数: 1782 | 4 呵呵,这个我明白了。find的参数是reverse_iterator,所以返回也是,转换成
iterator必须通过base()。
【在 g*********s 的大作中提到】 : 另外第一个代码里为何要有find().base()? find()不是返回了iterator,然后作为参 : 数传递给erase/insert吗?base()是什么啊?查了半天也没找到。
| g*********s 发帖数: 1782 | 5 那个不就是指从前往后找还是从后往前找吗?但是找到的都是指向2的iterator,然后
删除,不是这样吗?
【在 q*****g 的大作中提到】 : hint: it uses rbegin(), rend(), which means that it is reverse iterator.
| g*********s 发帖数: 1782 | 6 OK,明白了。reverse_iterator返回的是下一个。
但是为何有这么古怪的规定啊?这个语义和reverse这个词的含义完全不搭界呀。如果
想提供返回前一个元素的机制怎么办?
【在 g*********s 的大作中提到】 : 那个不就是指从前往后找还是从后往前找吗?但是找到的都是指向2的iterator,然后 : 删除,不是这样吗?
|
|