c++ - 修复(锁定)std::vector 的大小

标签 c++ vector locking size constants

有没有一种方法可以固定 vector 的大小并仍然改变内容?

我尝试制作一个 const vector const std::vector<int> vec(10);但这会阻止我更改值。

vec[3] = 3;给出编译器错误:分配只读位置。

我也尝试过对非常量 vector 的常量引用

std::vector<int> vec(10);
const std::vector<int>& vecref(vec);

这给出了相同的编译器错误。

我希望能够在声明时或初始化阶段后修复 vector 大小。我可以使用老式数组,但我希望能够使用 vector 算法。

如果有任何不同,我正在使用 g++。

最佳答案

在 C++0x 中,您可以使用 std::array<>,它就像一个很好的旧数组,具有作为 STL 容器的额外好处,因此允许许多 std::algorithms。

或者,您可能想尝试 boost::array。

注意还有std::tr1::array<> .


编辑:

Actually, one of the cases that I hadn't gone into was to grow the vector while reading configuration files and then fix the size after that - DanS

那么,为什么不这样(说明):

#include <vector>

int main () {
    std::vector<int> foo;

    /* ... crunch upon foo ... */

    // make a copy vector->vector:
    const std::vector<int> bar (foo); 

    // make a copy any->vector
    const std::vector<int> frob (foo.begin(), foo.end());
}

或者,如果您需要 reset() 语义,但又想禁止 resize() 等,您可以编写一个容器适配器:

template <typename T, typename Allocator = allocator<T> >
class resettable_array {
public:
    // container ...
    typedef typename std::vector<T,Allocator>::iterator iterator;
    typedef typename std::vector<T,Allocator>::const_iterator const_iterator;
    ...

    iterator begin() { return vector_.begin() }
    const_iterator begin() const { return vector_.begin(); }
    ...

    void push_back (T const &v) { vector_.push_back (v); }
    ...

    // custom
    void reset () { ... }

private:
    std::vector<T,Allocator> vector_;
};

另见:

关于c++ - 修复(锁定)std::vector 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623387/

相关文章:

OpenCV 向量到 Mat 但不是 element->row

c - 得到错误的答案使用线程安全计数器

c++ - 为什么使用 std::vector 而不是 realloc?

c++ - 从 istream_iterator 理解平等

c++ - C++中具有构造函数的模板化typedef结构

Oracle用select语句锁表

sql-server - SQL Server 意图锁是如何工作的?

c++ - 无法更改指针矩阵的值

c++ - 从 std::vector 的前面删除项目时, 'compacting memory' 是什么意思?

c++ - 是在连续空间中分配的嵌套 vector