简体   繁体   中英

How to initialize an empty global vector in C++

I have a general question. Hopefully, one of you has a good approach to solve my problem. How can I initialize an empty vector?

As far as I read, one has to know the size of an array at compiling time, though for vectors it is different. Vectors are stored in the heap (eg here: std::vector versus std::array in C++ )

In my program I want to let the client decide how accurate interpolation is going to be done. That's why I want to use vectors.

The problem is: For reasons of clear arrangement I want to write two methods:

  • one method for calculating the coefficients of an vector and

  • one method which is providing the coefficients to other functions.

Thus, I want to declare my vector as global and empty like

vector<vector<double>> vector1;
vector<vector<double>> vector2;

However, in the method where I determine the coefficients I cannot use

//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" will be given by the client when running the program. So my question is how can I initialize an empty vector? Any ideas are appreciated!

Note please, if I call another function which by its definition gives back a vector as a return value I can write

vector2= OneClass.OneMethod(SomeInputVector);

where OneClass is an object of a class and OneMethod is a method in the class OneClass.

Note also, when I remove the comment /**/ in front of the vector, it is not global any more and throws me an error when trying to get access to the coefficients.

使用resize

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

Use resize() function as follows:

vector<vector<double>> v;

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

It look to me that you're actually asking how to add items to your global vector. If so this might help:

//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] = ...;
}

Unsure if it is what you want, but assign could be interesting :

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM