gpt4 book ai didi

c++ - 你什么时候会直接改变 std::vector::end() ?

转载 作者:行者123 更新时间:2023-12-04 16:28:28 27 4
gpt4 key购买 nike

根据 c++ reference , vector::end()声明为 iterator end() noexcept; (第一种形式)。

这是否意味着我们可以像下面那样直接操作它?

vector<int> v(10);
v.end() = v.begin()+100; // change its end iterator arbitrarily

这在 clang 中编译得很好,但我怀疑这会导致运行时问题。分段故障?内存泄漏?我不知道。

我的问题是:
  • 它会导致运行时问题吗?
  • 是为了任意公开这个
    操纵首先是设计中的缺陷?
  • 有没有
    直接操作 end() 的有意义的用例迭代器
    不会导致任何运行时问题?
  • 最佳答案

    1. Is it going to cause run-time issues?


    std::vector::end()按值返回。所以 v.end() = v.begin()+100;只分配给 v.end() 返回的复制的临时迭代器. (准确地说,在临时对象上调用了复制赋值运算符,这仅适用于类类型。)临时对象会立即销毁,并且赋值与 vector v 无关。 .

    1. Is exposing this for arbitrary manipulation a defect in the design in the first place?


    只是,毫无意义。

    1. Is there any meaningful use case of directly manipulate the end() iterator which does not cause any run-time issue?


    结束迭代器由 vector 控制本身,你不能直接改变它。它通过对 vector 进行修改而改变。喜欢 push_back , erase , 等等。

    关于c++ - 你什么时候会直接改变 std::vector::end() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58710646/

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