为什么迭代器在容器调用分配时不能引用它们所属的容器?
why the iterators can't refer to the container they belong to when container calls assign?
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()
时,迭代器不能引用它们所属的容器。
这对于顺序容器(如vector
或deque
(是非法的。
[sequence.rekmts]/4表100
a.assign(i,j)
pre:i
、j
不是a
的迭代器
但我相信它明确地对std::string
:有效
[string::assign]/20
template<class InputIterator> basic_string& assign(InputIterator first, InputIterator last);
效果:等效于
assign(basic_string(first, last))
。
该标准要求实现在执行分配之前复制序列(或者至少表现得像这样(。我看不到迭代器不指向所分配的字符串的要求。
我不知道为什么它对容器不起作用,但如果非要我猜测的话,我会说这正是为了避免强制实现制作额外的副本。
相关文章:
- 不明白迭代器,引用和指针失效,一个例子
- C 地图 - 自引用迭代器
- 如何在find_if谓词中引用迭代器
- 尝试取消引用迭代器的分段错误
- 如何通过引用迭代器的解引用使幂等性
- 双取消引用迭代器的返回类型
- 正在返回与对象相同的取消引用迭代器
- 取消引用迭代器会导致'can not convert'错误,而它似乎不应该
- 通过取消引用迭代器将Vector写入文件
- 为什么我不能取消引用迭代器?
- 为什么我需要取消引用迭代器
- STL集合的去引用迭代器
- 递增解引用迭代器
- c++在解引用迭代器时x++与x = x+ 1的区别
- 指针向量解引用迭代器时出现段错误
- 标准如何处理容器插入函数中的自引用迭代器?
- 作为boost::bind复合链的一部分的解引用迭代器
- 解引用迭代器(c++)
- C++类型的去引用迭代器
- std::for_each等效项,它不取消引用迭代器