我痴迷于做const
真正应该做的事情const
,即使这样做似乎有点痛苦。
在这种情况下,我想要一个vector<int>
可以添加元素但无法更改其现有元素的元素。问题是这vector<const int>
是不允许的。
目的不仅是防止我的类的用户修改他们不应该修改的东西(这可以通过const
成员函数中的迭代器轻松完成)。同样重要的是,我自己以后不会在自己的代码中做我不打算做的事情。
我找到了两种选择:
改为使用
deque<const int>
。创建我自己的包装实际的矢量类
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); } };
您会推荐以下哪些想法(或其他想法)?编译器会将第二种选择转换为与直接使用向量一样快的代码吗?