代码之家  ›  专栏  ›  技术社区  ›  Michael Kristofik

容器的赋值函数可能溢出吗?

  •  2
  • Michael Kristofik  · 技术社区  · 14 年前

    我今天碰到这个问题,想我应该把它贴出来供社区参考和/或发表意见。

    标准C++容器向量、DEQE、列表和字符串提供了 assign 成员函数。有两个版本;我主要对接受迭代器范围的版本感兴趣。这个 Josuttis book 有点模棱两可。从第237页…

    分配范围[BEG,END]的所有元素;这是用[BEG,END]元素的副本替换所有现有元素。

    它没有说明如果被分配容器的大小与被分配的范围不同会发生什么。它是否截断?它是否自动扩展?这是未定义的行为吗?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Michael Kristofik    14 年前

    这是我发现的。结果证明我不必担心默默地做错事。标准再一次得到了答案。根据第23.2.6.1节:

    void assign(Iter first, Iter last);

    影响:

    erase(begin(), end());

    insert(begin(), first, last);

    所以这真的只是 clear() 其次是 insert 全范围的。