Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/40: Рейтинг темы: голосов - 40, средняя оценка - 4.85
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
1

Скорость работы std::vector и обычного динамического массива

16.05.2017, 16:01. Показов 8124. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

Есть задача по мат.моделированию, размер сетки 100х50. Использовались обычные динамические массивы:
C++
1
2
3
double ***n;        // n[Nx+2][Ny+2][Nc]          
double ***neq;            // neq[Nx][Ny][Nc]    
double ***u;
// u[Nx][Ny][1]

в программе были утечки памяти, ввиду наличия визуализационной части.
Динамические массивы были заменены на
C++
1
2
3
vector<vector<vector<float>>> u(Nx+2, vector<vector<float>>(Ny+2, vector<float>(1)));
vector<vector<vector<float>>> neq(Nx+2, vector<vector<float>>(Ny+2, vector<float>(8)));
vector<vector<vector<float>>> n(Nx+2, vector<vector<float>>(Ny+2, vector<float>(8)));
производительность упала в три раза....
ПРочитал вот статью https://habrahabr.ru/post/122036/
расстроился, но так как она вышла давно, то может есть какие-то улучшения в векторах с того времени..?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2017, 16:01
Ответы с готовыми решениями:

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор....

Ошибка: E2034 Cannot convert 'int' to 'std::vector<std::vector<TRabbitCell,std::allocator<TRabbitCell>>...
Есть двухмерный вектор: std::vector&lt;std::vector&lt;TRabbitCell&gt; &gt; *cells(5, 10); Пытаюсь...

Вывести значения std::vector<std::vector<int*> >
Подскажите, как вывести значения? const size_t row = 3; const size_t col = 3;...

21
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,262
Записей в блоге: 7
16.05.2017, 20:00 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Zigfrid Посмотреть сообщение
Но все равно странно, что std::vector в дебаге работает медленней динамического массива
vector - это шаблон класса
Когда вы обращаетесь по индексу у вектора вызывается специальная функция operator[]
В debug компилятор "по честному" создает функции и вставляет их вызовы
В Release компилятор может вставить тело функции на место использования и вызов operator[] превращается в обращение по адресу как и у "обычных" массивов.
1
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
17.05.2017, 08:42  [ТС] 22
Max Dark, спасибо за объяснение!
0
17.05.2017, 08:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2017, 08:42
Помогаю со студенческими работами здесь

Как изменять размер std::vector<std::vector>?
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: ...

Как правильно указать начальный адрес для динамического (обычного) массива?
Предположим у меня есть динамически выделяемый массив int *ptr0 = new int; Данный массив мне...

Выделение памяти для вектора std::vector<iris> *v = new std::vector<iris>
Можно ли создать вектор, выделить для него память, так что бы он &quot;жил&quot; до конца работы программы....

Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator>
Вопрос по вектору. Допустим есть вектор, std::vector&lt;int&gt; vec; на каком - то этапе заполнения я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru