仅在vector <vector <int>&gt;中创建外部向量固定</载体<int>的

时间:2012-12-08 10:50:03

标签: c++

我想创建一个vector<vector<int>>,其中外部向量是固定的(始终包含相同的向量),但内部向量可以更改。例如:

int n = 2; //decided at runtime
assert(n>0);
vector<vector<int>> outer(n); //outer vector contains n empty vectors

outer.push_back(vector<int>()); //modifying outer vector - this should be error

auto outer_it = outer.begin();
(*outer_it).push_back(3); //modifying inner vector. should work (which it does).

我尝试只做const vector<vector<int>>,但这甚至使内部向量const

我是创建自己的自定义FixedVectors课程的唯一选择,还是有更好的方法可以做到这一点?

3 个答案:

答案 0 :(得分:2)

definition

  

向量是表示可以更改的数组的序列容器   尺寸。就像数组一样,矢量使用连续的存储位置   它们的元素,这意味着它们的元素也可以被访问   在常规指向其元素的指针上使用偏移量,同样如此   在数组中有效。但与阵列不同,它们的大小可以改变   动态地,由它们自动处理它们的存储   容器

如果您不希望数据结构发生变化,则矢量可能不是外层的最佳选择,如何使用矢量数组。这样,数组具有固定的大小,无法修改,同时仍然可以自由地在运行时声明其大小。

vector<int> *outer;
int VectSize;
cout >> "size of vector array?"
cin >> VectSize;
outer = new vector<int>[VectSize]; //array created with fixed size
outer.push_back() //not happening

答案 1 :(得分:1)

const vector<unique_ptr<vector<int>>> outer = something(n);

对于某些东西,你可以编写一个函数,如下所示:

vector<unique_ptr<vector<int>>> something(int n)
{
    vector<unique_ptr<vector<int>>> v(n);
    for (auto & p : v)
        p.reset(new vector<int>);
    return v;
}

答案 2 :(得分:1)

将外部向量包装到一个只提供at,begin,end和operator []的类中。让类只有一个构造函数占用它的容量。

这很可能是最好的方式。