Есть ли способ отодвинуть вектор обратно в вектор?C ++ - PullRequest
0 голосов
/ 28 марта 2012

Например, если у меня был один или несколько 2D векторов, и я просто хочу сохранить их, например, в базе данных.

 vector<vector<double>> one2DVector;
 vector<vector<double>> two2DVector;

 //Obviously can't do that but this is what I want to do
 vector<vector> dataBase;

 dataBase.push_back(one2DVector);
 dataBase.push_back(one2DVector);

Ответы [ 6 ]

5 голосов
/ 28 марта 2012

Вы должны объявить это так:

vector<vector<vector<double>>> dataBase;

Обратите внимание, что если вы используете C ++ 98, а не C ++ 11, вам необходимо поставить пробелы между > скобками.

3 голосов
/ 28 марта 2012
vector< vector< vector <double> > > database;
vector<vector<double>> one2DVector;
vector<vector<double>> two2DVector;
...
//insert elements into two-dimension arrays.
...
database.push_back(one2DVector);
database.push_back(two2DVector);
1 голос
/ 28 марта 2012

Кажется, вы хотите, чтобы dataBase был вектором двухмерных векторов. Если это так, то вы должны определить это так:

vector<vector<vector<double> > > dataBase;

1 голос
/ 28 марта 2012

Вы должны попытаться сделать вашу базу данных

vector< vector< vector <double> > >

вместо vector<vector> (что бы это ни было).

Typedefs может помочь сделать это немного более читабельным

typedef vector<vector<double> > vec_2D;

vec_2D one2DVector;
vec_2D two2DVector;

vector<vec_2D> dataBase;

Имейте в виду, что этот dataBase будет содержать копий 2D векторов, что, я думаю, не совсем то, что вы хотите (но, возможно, это так). Возможно, вы захотите, чтобы ваша база данных была контейнером указателей или подходящих для контейнера интеллектуальных указателей (например, shared_ptr).

0 голосов
/ 28 марта 2012

У вас есть вектор vector<double>, но вы пытаетесь нажать vector<vector>.

0 голосов
/ 28 марта 2012
 vector<vector<double>> one2DVector;
 vector<vector<double>> two2DVector;

 //Obviously can't do that but this is what I want to do
 vector<vector<vector<double> > > dataBase; //HERES THE EDIT

 dataBase.push_back(one2DVector);
 dataBase.push_back(one2DVector);

ЭТО должно работать нормально

однако, если вы хотите объединить вектор, вы можете сделать это.

vector<vector<double>>  database(one2DVector);
database.insert(database.end(), two2DVector.begin(), two2DVector.end());
...