векторная оптимизация - простой метод - PullRequest
0 голосов
/ 05 июня 2011

У меня есть сомнения по поводу следующего случая; Предположим, я хочу определить вектор вектора для размещения набора элементов, и я могу добавить данные и использовать эти элементы для вычисления чего-то еще. тогда я больше не хочу этот вектор. потом, предположим, если я захочу представить другой набор данных в качестве вектора вектора, тогда я смогу повторно использовать ранее созданную переменную, тогда;

(1), если я создал свой вектор вектора как динамическую память и удалил как

vector<vector<double> > *myvector = new vector<vecctor<double> >;
//do push back and use it

delete myvector;

и затем снова использовать

(2) если бы я создал свой вектор вектора как просто

vector<vector<double> > myvector;

//do push back and use it
myvector.clear();

и затем снова использовать

но, я думаю, в обоих методах осталось очень мало памяти, хотя мы ее удалили. Итак, я хотел бы знать, каков эффективный метод для определения этого вектора вектора.

(3) если размер внутреннего вектора всегда равен 2, то будет ли он эффективно использовать вектор вектора путем определения

vector<vector<double> > myvector(my_list.size(), vector<double>(2)) кроме контейнеров другого типа

(4) если я использую предопределенный другой класс для хранения внутри 2 элементов, а затем возьму вектор этого типа объекта (например, XY - это класс, который может содержать 2 элемента, может быть массивом)

vector<XY>;

Надеюсь, кто-нибудь, пожалуйста, прокомментируйте мне, какой будет самый эффективный (из 1-4) метод, который требует скорости и памяти. Есть ли лучшие способы, пожалуйста, предложите мне тоже. спасибо

Ответы [ 2 ]

2 голосов
/ 05 июня 2011

Если вам нужны только два элемента, возможно, самый эффективный способ:

std::vector<std::tr1::array<double, 2>> myvector;
// or std::vector<std::pair<double, double>> myvector;

// use it

myvector.clear(); // This will not deallocate any memory, so what has alrdy been allocated will be used for future push_backs
0 голосов
/ 05 июня 2011

Если это домашнее задание (или нет), и вы хотите знать, что быстрее, то вам следует попробовать: запустите «назад и очистите» или «новые и удалите» в цикле несколько миллионов раз и время выполнения , Я подозреваю, что 2. будет немного быстрее.

Вы говорите, что хотите разместить набор элементов, и размер внутреннего вектора равен 2. Это немного неоднозначно, но вы можете дополнительно изучить 2 вещи: 1. std :: pair, если ваш «элемент» содержит 2 других «вещи» 2. std :: map, если вы хотите сослаться на "элементы" на основе значения другого "элемента"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...