Форум программистов, компьютерный форум CyberForum.ru

Почему вместо вектора 2х5 выходит 2х9 - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Массив. Программа для определения максимального подъема 100-километровой автотрассы. http://www.cyberforum.ru/cpp-beginners/thread561874.html
Здравствуйте! Вот написал программу, но не устраивает меня тем, что нужно выдавать самый длинный подъем, так и есть, но вот как написать от какого элемента начался подъем и каким закончился именно в массиве, то есть его индекс. А в целом задача этой программы: Известна высота над уровнем моря каждого километра 100-километровой автотрассы. Определить, на каком расстоянии от начала автотрассы...
C++ Различия компиляции Degug и Release версий Всем доброго времени суток, написал парсер с использованием стека, компилирую в Degug версии - все работает корректно как и ожидается, компилирую в Release версии - выдает полный бред. Если кто-то сталкивался с этой проблеммой, будте добры объясните. Файл с проектом Visual Studio 2008 прилагаю http://www.cyberforum.ru/cpp-beginners/thread561859.html
C++ Как написать проверку на "циферность"
Хочу сделать такое: if (Переменная - не цифра) { cout << "Введите переменную еще раз"; } Знаю, есть функция isdigit(), но тут проблема - эта функция проверяет числа до 256, а это не годится, мне нужно больше :)
C++ Хэширование строк
Доброе время суток! Пользователь вводит строку, она записывается в массив (если он не переполнен); Вычисляется её хэш адрес по алгоритму свёртка 2; Если этот адрес в хэш таблице занят, выполняется повторное хэширование простым числом; Если и тут занято, то номер строки добавляется в массив для синонимов (для последующего линейного поиска) Привожу исходный код #include <iostream>...
C++ C++ декомпилляция и защита приложений http://www.cyberforum.ru/cpp-beginners/thread561844.html
Всем привет, очень удивлен, что нет такой темы, но все же: 1) Есть ли возможность декомпилляции приложений написанных на С++? или как минимум дизассембирования 2) Если в п.1 ответ да, то есть ли возможность защитить свои константы?
C++ Консольная РПГ. (MUD-подобная). Здравствуйте. Недавно я начал изучать C++. И для хорошего усвоения пройденного материала решил написать консольную MUD-подобную РПГ. Кто не знаком с таковыми, и лень читать на wiki, объясню На примере: Вы очнулись в страшной темной комнате. Что предпринять? 1. Выйти через дверь. 2. Вылезти через окно. Так вот, все это дело что написано курсивом отображается в консоли. Человек вводит... подробнее

Показать сообщение отдельно
Bers
Заблокирован
30.04.2012, 02:57     Почему вместо вектора 2х5 выходит 2х9
Цитата Сообщение от Lopster92 Посмотреть сообщение
Ага)) А разве сбросить не лучше будет, чем каждый раз новый создавать?
Зависит от ситуации.

Вектор при сбрасывании не чистит память. Если это не критично, то дешевле его сбрасывать, а не создавать каждый раз заново.

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

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

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
pathes_v psv;
for(size_t j=0; j < LIMIT_PS; j++){
    path_v pv;
    for(size_t i=j; i < LIMIT_P; i++) {
         point p = {i, i+1};  
         pv.push_back(p);
    }
    //при добавлении очередного вектора, массив расширяется.
    //Что является дорогостоящей операцией
    psv.push_back(pv); 
 }
Я бы сделал так:


C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
//создаю вектор с заранее явно указанными размерами
pathes_v psv(LIMIT_PS, path_v (LIMIT_P)); 
for(size_t j=0; j < LIMIT_PS; j++){
 
     path_v & agent = psv[j]; //извлекаем внутренний вектор
 
    for(size_t i=j; i < LIMIT_P; i++) {
         point& p = agent[i]; //извлекли данные из внутреннего вектора
         p.dist = i;
         p.way = i+1;
    }
 }
Или даже вот так:



C++ (Qt)
1
2
3
4
5
6
7
8
9
//создаю вектор с заранее явно указанными размерами
pathes_v psv(LIMIT_PS, path_v (LIMIT_P)); 
for(size_t j=0; j < LIMIT_PS; j++){
    for(size_t i=j; i < LIMIT_P; i++) {
         point& p = psv[j][i]; //работаем, как с обычным двухмерным массивом
         p.dist = i;
         p.way = i+1;
    }
 }
 
Текущее время: 14:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru