2017-02-22 50 views
0

Векторный Vector C++ Привет, я не понимаю синтаксис вложенных векторов для имитации массива, у меня есть следующий код.Векторный Vector C++

vector< vector< float> > myvector (n, vector < float> (2)); 

Но я не совсем понимаю, как это работает, особенно там, где вы указываете размер векторов и векторов в нем, если вы хотите сделать изменения размера так, что мой вектор вектор определил размеры, как я могу изменять размеры внутренних векторов? Нечто подобное изменение vec [10] [2] к vec [10] [5] (изменению второго измерения)

В дополнении к тому, как сделать копии с многомерными векторами что-то вроде:

vector< int> myvector (myVectorToCopy, myVectorToCopy+myVectorToCopy.size()); 

Но с несколькими размерами. Спасибо.

+1

Знаете ли вы, как изменить размер простого вектора, например 'std :: vector a;'? Вы знаете, как получить доступ к элементам вектора? Объедините их. –

+1

Вы хотите матрицы. Вы можете найти библиотеки C++ для них. –

ответ

0

vector<vector<float>> означает, что вы создаете вектор, который содержит вектор поплавков. Конструктор аргумент означает, что вы создаете вектор размера n, где каждый элемент вектора является вектором поплавков, имеющих размер 2.

Чтобы изменить размер vector<vector<float>>:

for (int i = 0; i < n; ++i) 
    A[i].resize(newSize); 

В качестве альтернативы вы можете использовать:

A.assign(n,vector<float>(newSize)); 

Чтобы сделать копию многомерного вектора использования конструктора:

vector<vector<float>> B(A); 
0

Векторы в C++ будут автоматически изменяться, если вы их заполните и попробуйте добавить к ним больше. Если вы знаете точный размер своего вектора, я бы предложил переключиться на std::array, однако вы потеряете возможность изменять их размер во время выполнения.

std::vector::operator[] имеет перегрузку, возвращающую ссылку на T, используемый для создания шаблона (в вашем случае T является std::vector, вложенные один). Если вы знаете, индекс во внешнем векторе, вы могли бы сделать что-то вроде:

myVec[0].resize(5); 

будет изменять размер вашего вложенного вектора в позиции 0 до 5 элементов.

Копирование так же, как доступ к:

std::copy(std::begin(VecToCopy), std::end(VecToCopy), std::begin(VecToFill)); 

std::begin Использование последней не может быть то, что вы хотите, но только в качестве примера.

http://en.cppreference.com/w/cpp/algorithm/copy
http://en.cppreference.com/w/cpp/container/array