avatar
再问两个C++问题# Programming - 葵花宝典
g*s
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
avatar
g*s
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());

avatar
q*g
3
hint: it uses rbegin(), rend(), which means that it is reverse iterator.

【在 g*********s 的大作中提到】
: 另外第一个代码里为何要有find().base()? find()不是返回了iterator,然后作为参
: 数传递给erase/insert吗?base()是什么啊?查了半天也没找到。

avatar
g*s
4
呵呵,这个我明白了。find的参数是reverse_iterator,所以返回也是,转换成
iterator必须通过base()。

【在 g*********s 的大作中提到】
: 另外第一个代码里为何要有find().base()? find()不是返回了iterator,然后作为参
: 数传递给erase/insert吗?base()是什么啊?查了半天也没找到。

avatar
g*s
5
那个不就是指从前往后找还是从后往前找吗?但是找到的都是指向2的iterator,然后
删除,不是这样吗?

【在 q*****g 的大作中提到】
: hint: it uses rbegin(), rend(), which means that it is reverse iterator.
avatar
g*s
6
OK,明白了。reverse_iterator返回的是下一个。
但是为何有这么古怪的规定啊?这个语义和reverse这个词的含义完全不搭界呀。如果
想提供返回前一个元素的机制怎么办?

【在 g*********s 的大作中提到】
: 那个不就是指从前往后找还是从后往前找吗?但是找到的都是指向2的iterator,然后
: 删除,不是这样吗?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。