如何在C ++

时间:2015-07-27 14:37:05

标签: c++ vector initialization global declaration

我有一个普遍的问题。希望你们其中一个人有一个很好的方法来解决我的问题。 如何初始化空矢量?

据我所知,在编译时必须知道数组的大小,但对于向量,它是不同的。向量存储在堆中(例如:std::vector versus std::array in C++

在我的程序中,我想让客户决定如何准确插值。这就是我想使用矢量的原因。

问题是:出于明确安排的原因,我想写两种方法:

  • 计算向量系数的一种方法

  • 一种为其他函数提供系数的方法。

因此,我想将我的矢量声明为全局并且像

一样空
vector<vector<double>> vector1;
vector<vector<double>> vector2;

然而,在我确定系数的方法中我不能使用

//vector containing coefficients for interpolation
/*vector<vector<double>>*/   vector1 (4, vector<double>(nn - 1));
for (int ii = 0; ii < nn - 1; ii++) {vector1[ii][0] = ...;
}

&#34; NN&#34;将在运行程序时由客户端提供。所以我的问题是如何初始化空向量?任何想法都表示赞赏!

请注意,如果我调用另一个函数,根据它的定义,将一个向量作为返回值给出,我可以写

vector2= OneClass.OneMethod(SomeInputVector);

其中OneClass是类的对象,OneMethod是类OneClass中的方法。

另请注意,当我删除向量前面的注释/ ** /时,它不再是全局的,并且在尝试访问系数时会抛出错误。

4 个答案:

答案 0 :(得分:1)

使用public function getItem($itemNumber, $pageNumber = null)

resize

答案 1 :(得分:0)

使用resize()功能如下:

vector<vector<double>> v;

int f(int nn){
   v.resize(4);
   for(int i = 0; i < 4; i++){
      v[i].resize(nn - 1);
   }
}

答案 2 :(得分:-1)

在我看来,您实际上是在询问如何向全局矢量添加项目。如果是这样可能会有所帮助:

//vector containing coefficients for interpolation
for (int i = 0; i < 4; ++i)  
    vector1.push_back(vector<double>(nn - 1));

for (int ii = 0; ii < nn - 1; ii++) 
{
    vector1[ii][0] = ...;
}

答案 3 :(得分:-1)

不确定它是否是您想要的,但分配可能很有趣:

vector<vector<double>> vector1; // initialises an empty vector

// later in the code : 
vector<double> v(nn -1, 0.); // creates a local vector of size 100 initialized with 0.
vector1.assign(4, v);  // vector1 is now a vector of 4 vectors of 100 double (currently all 0.)