gpt4 book ai didi

c++ - 为什么迭代器在容器调用分配时不能引用它们所属的容器?

转载 作者:行者123 更新时间:2023-11-30 02:30:27 27 4
gpt4 key购买 nike

string s="zhangzhizhong";
s.assign(s.begin()+2, s.end()-2);
string is correct!
vector<int> ivec{0,1,2,3,4,5};
ivec.assign(ivec.begin()+1, ivec.end()-1);
vector is also correct!!!

上面的代码是正确的,但是书上写的是容器调用assign()时,迭代器不能引用所属的容器。

最佳答案

这对于顺序容器是非法的,例如 vectordeque

[sequence.reqmts]/4 Table 100

a.assign(i,j) pre: i, j are not iterators into a

但我相信它明确地对 std::string 有效:

[string::assign]/20

template<class InputIterator>
basic_string& assign(InputIterator first, InputIterator last);

Effects: Equivalent to assign(basic_string(first, last)).

标准要求实现在执行赋值之前复制序列(或者至少,表现得像它那样)。没有要求我可以看到迭代器不指向正在分配的字符串。

我不确定为什么它不能以这种方式用于容器,但如果我不得不猜测,我会说这正是为了避免强制实现制作额外的拷贝。

关于c++ - 为什么迭代器在容器调用分配时不能引用它们所属的容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38570267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com