如何在c++中初始化一个空的全局向量

How to initialize an empty global vector in C++

本文关键字:一个 向量 全局 c++ 初始化      更新时间:2023-10-16

我有一个一般性的问题。希望你们中有人有好的方法来解决我的问题。如何初始化一个空向量?

据我所知,在编译时必须知道数组的大小,尽管对于向量来说是不同的。向量存储在堆中(例如:std::vector相对于c++中的std::array)

在我的程序中,我想让客户端决定如何精确的插值将被完成。这就是为什么我要用向量

问题是:为了安排清楚,我想写两个方法:

  • 计算矢量和

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

因此,我想将vector声明为全局的空向量,如
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] = ...;
}

"nn"将在运行程序时由客户端给出。我的问题是如何初始化一个空向量?任何想法都很感激!

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

vector2= OneClass.OneMethod(SomeInputVector);

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

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

使用resize:

vector1.resize(4, vector<double>(nn - 1));

使用resize()函数如下:

vector<vector<double>> v;
int f(int nn){
   v.resize(4);
   for(int i = 0; i < 4; i++){
      v[i].resize(nn - 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] = ...;
}

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

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.)