gpt4 book ai didi

c++ - 元素不能更改的非常量 vector - 备选方案

转载 作者:行者123 更新时间:2023-11-30 04:22:31 25 4
gpt4 key购买 nike

我对制作东西很着迷 const那真的应该是const ,即使这样做看起来有点痛苦。

在这种情况下,我想要一个 vector<int>我可以向其中添加元素,但我无法更改其现有元素。问题是 vector<const int>不允许。

目的不仅仅是为了防止我的类的用户修改他们不应该修改的东西(这可以通过成员函数中的const 迭代器轻松完成)。同样重要的是,我自己以后不会在我自己的代码中做我不打算做的事情

我找到了两种选择:

  • 使用 deque<const int>相反。

  • 创建我自己的 vector 类来包装实际的 vector ,像这样(我在这里为 int 这样做,但实际上我会使用模板来实现通用性)

    class my_vector {
    private:
    std::vector<int> vec;
    public:
    std::vector<int>::const_iterator cbegin() { return vec.cbegin(); }
    std::vector<int>::const_iterator cend() { return vec.cend(); }
    void push_back(int i) { vec.push_back(i); }
    };

您会推荐这些(或其他)哪些想法?编译器会将第二种选择转换为与直接使用 vector 一样快的代码吗?

最佳答案

你的痴迷是可以理解的,我并不反对,但除非你真的有紧迫的需要,否则所付出的努力可能不值得。

假设您选择了 vector作为基于您的设计要求的容器,我不建议将其更改为 deque ,或任何其他类型。这只会让 future 的读者(可能是您自己)感到困惑,否则也是一种不好的做法。

如果我们采用您的包装器解决方案,您将不得不 隐藏 覆盖所有可以修改 vector 的成员,这是一个问题,因为有许多方法用于访问和修改,例如operator[] , at() , front() , back() .这可能会让 future 的读者感到困惑,因为他们已经习惯了“标准” vector行为。

对了,你确定吗deque<const int> foo;作品?我收到以下错误:

error: invalid conversion from 'const void*' to 'void*'

编辑 看来我没有完全回答你的问题。如果您必须选择一个,我会选择包装器方法。

关于c++ - 元素不能更改的非常量 vector - 备选方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777773/

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