Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
43 / 0 / 0
Регистрация: 14.06.2014
Сообщений: 147
1

Что лучше: динамические массивы, векторы, списки, map контейнеры или что-то ещё?

24.01.2015, 22:59. Просмотров 1797. Ответов 9
Метки нет (Все метки)

Привет всем!
Помогите правильно алгоритм выбрать.
Надо получать из файлов (около 8000 файлов) значения и записать их в массивы или в структуру какую-то. Для последующего анализа. Редактировать данные не потребуется в файлах. Значения типа char, int, float и double. Файл текстовый порядка 1 – 2 млн. строк, значения в строках разделены точкой с запятой (*.csv файлы). Столбцов 52,
Нужно просто выбрать оптимальные параметры посмотреть и сопоставить влияние одного параметра на другие, построить графики.
Я научился в С++ работать с динамическими массивами, но как я сейчас понимаю, это не самый оптимальный вариант. Приходится просматривать каждый файл два раза, считать количество строк, потом считывать данные в массив.
Позже прочитал, что есть и другие варианты, векторы, списки, map контейнеры и что-то ещё. Подскажите, что является более оптимальным для таких задач? Или продолжать делать с динамическими массивами?

Я буду признателен Вам за любые практические советы и замечания в решении этой задачи, первый раз затеял большое дело на С++ для этого и начал изучать его, надеюсь с языком не ошибся…
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2015, 22:59
Ответы с готовыми решениями:

Подскажите что лучше:Denwer или что-то ещё?
Не знаю что лучше?

Стоит 4 гига. Windows7 64. Что лучше сделать,отключить часть процесса автозапуска,а какие за что отвечают не пойму, или докупить ещё планок памяти?
Не давно заметил что комп иногда "притормаживает",а гаджет "индикатор ЦП" показывает нагрузку в тот...

Что лучше использовать, матрицу или списки?
Задание: Дан граф, определить является ли он связным. Подскажите пожалуйста, при выполнении...

Что лучше - вектора или массивы?
Я читал где-то, что не стоит пользоваться векторами. Говорят они намного медленнее массивов. А что...

9
DU
1492 / 1138 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
24.01.2015, 23:12 2
я так понял двойной проход по файлу из-за необходимости знать, под какое число выделять память в массиве.
ну и если массив вас устраивает - то можно воспользоваться вектором. после его заполнения весь остальной
ваш код останется почти без изменений. std::vector как раз альтернатива обычным массивам.
0
43 / 0 / 0
Регистрация: 14.06.2014
Сообщений: 147
24.01.2015, 23:15  [ТС] 3
Вы правильно поняли, но я посмотрел тут:
http://valera.asf.ru/cpp/book/c06.html
Несколько таблиц и запутался, сказано: "...Отсюда следует, что вектор лучше подходит для типов данных малого размера, нежели список, и наоборот. "
Вот и остановился, подумать...
Мой код ещё в зачаточном состоянии ничего не поздно поменять...
0
2368 / 1779 / 387
Регистрация: 15.12.2013
Сообщений: 7,544
24.01.2015, 23:23 4
Цитата Сообщение от russian_pepper Посмотреть сообщение
Нужно просто выбрать оптимальные параметры посмотреть и сопоставить влияние одного параметра на другие, построить графики.
Из той-же ссылки:
если требуется произвольный доступ к элементам, вектор предпочтительнее;
Я рекомендую использовать вектор,если нет оснований его не использовать.
0
DU
1492 / 1138 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
24.01.2015, 23:24 5
в общем раз вы первый раз столкнулись, то врятли у вас получится выбрать оптимальный контейнер сразу.
там куча копромисов: скорость вставки, скорость доступа, оверхед по памяти ну еще чего, что я не помню.
от этого всего есть инкапсюляция: пишете класс с нужным вам публичным интерфейсом. а в имплементации
используете самое простое: вектор. если в какой-то момент вы поймете что он вас не устраивает и больше
подходит другой контейнер - переписываете имплементацию такого класса. весь остальной код остается
без изменений.

на счет вектора малого размера - хз. размер тут не причем. скорее всего имеет значение сколько памяти нужно отожрать за раз. ведь он выделяет ее одним куском и системному менеджеру памяти может оказаться сложно выделить большой незанятый кусок памяти. ну или там эмуляция какая-то хитрая начнется с виртуальной памятью. в общем там ньюансы. от этой проблемы должен спасать std::deque.

Короче: вы занялись преждевременной оптимизацией имхо. Используйте сперва вектор. если поймене, что
он не подходит - переделаете.
2
43 / 0 / 0
Регистрация: 14.06.2014
Сообщений: 147
24.01.2015, 23:33  [ТС] 6
Хорошо, спасибо, мне было важно знать, в каком направлении идти, буду смотреть что такое вектор и как с ним работать...
0
151 / 142 / 96
Регистрация: 15.03.2014
Сообщений: 297
24.01.2015, 23:46 7
S_el, существует специальная схема выбора контейнера stl. Встречал данную схему на одном известном сайте в двух вариантах:
- для старого стандарта C++
- и для стандарта C++11

Авторов данных схем я не знаю.

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

На мой взгляд, идеальной схемы не придумать для всех случаев. Данные же схемы подойдут для многих случаев.
Обе схемы прикрепил к сообщению.
3
Миниатюры
Что лучше: динамические массивы, векторы, списки, map контейнеры или что-то ещё?   Что лучше: динамические массивы, векторы, списки, map контейнеры или что-то ещё?  
43 / 0 / 0
Регистрация: 14.06.2014
Сообщений: 147
24.01.2015, 23:59  [ТС] 8
У меня по схеме Вектор получается, спасибо!
0
2368 / 1779 / 387
Регистрация: 15.12.2013
Сообщений: 7,544
25.01.2015, 00:01 9
Цитата Сообщение от BlackSpace Посмотреть сообщение
существует специальная схема выбора контейнера stl. Встречал данную схему на одном известном сайте в двух вариантах:
Для себя ничего нового не узнал,но спасибо.
1
BlackSpace
25.01.2015, 00:13     Что лучше: динамические массивы, векторы, списки, map контейнеры или что-то ещё?
  #10

Не по теме:

S_el, хаха я ошибся. Хотел написать ник автора темы, а по невнимательности Ваш написал :rofl:

0
25.01.2015, 00:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2015, 00:13
Привет! Вот еще темы с ответами:

Что мне делать с многоуровневым меню ? Вытаскивать напрямую из БД или кэшировать или что то еще ?
Меню выглядит так: **от** ~alfa romeo - модель - тип запчасти **до** ~volvo - модель - тип...

Не запускается Windows, не пойму что сломалось - ОС, жесткий диск или еще что-то...
Включаю ноутбук. Всплывает окно "Восстановление после ошибок Windows", в котором предлагается...

Оптимизация кода, структуры базы, или что еще можно сделать что бы быстрее работало!?
Всем привет! Господа, выручайте. Не пойму как еще оптимизировать... Есть куча связанных таблиц....

Что лучше С++ 6 или С++ 2010 Что выбрать, мое мнение
Что лучше С++ 6 или С++ 2010 Что выбрать, мое мнение Вот я тут на днях думал и пришел к выводу,...

Глобальные и локальные переменные: что лучше (или что для чего и в чем конкретная разница)?
Что лучше (или как надо (или что для чего и в чем конкретная разница)): 1. // объявление в...

Динамические массивы\Векторы. Операторы работы с ними
Здравствуйте, написал программу, но в ошибках выдаёт все операции, связаные с вектором. Библиотека...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.