Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> array, vector или new...[], что лучше??? 
:(
    Опции темы
boriska
Дата 20.4.2007, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 7.12.2006
Где: kharkov

Репутация: нет
Всего: нет



задание в Lippman'e

Цитата

Что лучше применить в каждой из следующих ситуаций: массив, динамический массив или вектор? Объясните свой выбор.

а)  Внутри функции Lut() нужен набор из 256 элементов для хранения объектов класса Color. Значения являются константами.
б)  Необходимо хранить набор из неизвестного числа объектов класса Account. Данные счетов читаются из файла.
в)  Функция gen_words(elem_size) должна сгенерировать и передать обработчику текста набор из elem_size строк.


Путаюсь в догадках smile . Четких критериев по которым можно было бы отдать предпочтение одному из вариантов не вижу.
Помогити, аргументируя please.

PM MAIL ICQ   Вверх
Daevaorn
Дата 20.4.2007, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(boriska @  21.4.2007,  00:45 Найти цитируемый пост)
Путаюсь в догадках  . Четких критериев по которым можно было бы отдать предпочтение одному из вариантов не вижу.Помогити, аргументируя please.

По мне, так когда ответ находишь сам, то всё же приятнее и пользы больше. Лучше прочти главу ещё раз, а если и тогда не догадаешься, то приходи - расскажем;)
PM MAIL WWW   Вверх
boriska
Дата 21.4.2007, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 7.12.2006
Где: kharkov

Репутация: нет
Всего: нет



предположения конечно имеются :

а) массив
    1. потому что знаем размер
    2. с набором будем работать локально

б) vector
     не известно кол-во счетов и можно использовать vector::push_back()

в) динамический массив
    1. знаем размер
    2. удобно передать указатель

но не уверен ...
PM MAIL ICQ   Вверх
Daevaorn
Дата 21.4.2007, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



boriska, ты получаешь приз за правильный ответsmile возьми его на верхней полкеsmile
PM MAIL WWW   Вверх
archimed7592
Дата 21.4.2007, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(boriska @  21.4.2007,  00:20 Найти цитируемый пост)
в) динамический массив
    1. знаем размер
    2. удобно передать указатель
а я бы вектор использовал... его не нужно уничтожать вызывающей ф-ции (в отличие от дин. массива)...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
vinter
Дата 21.4.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(archimed7592 @  21.4.2007,  16:10 Найти цитируемый пост)
а я бы вектор использовал... его не нужно уничтожать вызывающей ф-ции (в отличие от дин. массива)...

зато работает медленнее, и возможно неэффективно использует память.


--------------------
Мой блог
PM MAIL WWW   Вверх
archimed7592
Дата 21.4.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(vinter @  21.4.2007,  17:18 Найти цитируемый пост)
зато работает медленнее, и возможно неэффективно использует память. 
 smile слишком голословно...

Цитата(vinter @  21.4.2007,  17:18 Найти цитируемый пост)
зато работает медленнее
почему?

Цитата(vinter @  21.4.2007,  17:18 Найти цитируемый пост)
неэффективно использует память.
std::vector<myType> v (elem_size)... да и vector::reserve никто не отменял


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
vinter
Дата 21.4.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



помещение в вектор ф-ия значит уже медленнее, а также вся манипуляция идет через высокоуровненвые механизмы это опять же временные затраты.
да и если бы вектор был действительно лучшим по всем параметром, он бы давно стал заменой new\delete а этого не происходит..
Цитата

std::vector<myType> v (elem_size)... да и vector::reserve никто не отменял

дополнительные усилияsmile


--------------------
Мой блог
PM MAIL WWW   Вверх
apook
Дата 21.4.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



vector классный массив он лучше чем array В языке высокого уровня
Python массивы имеют примерно такую же природу что vector

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

Это сообщение отредактировал(а) apook - 21.4.2007, 17:54


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
archimed7592
Дата 21.4.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(vinter @  21.4.2007,  17:30 Найти цитируемый пост)
вся манипуляция идет через высокоуровненвые механизмы это опять же временные затраты.
конкретно, в чём затраты?
скажем так: чем по (трудо-, время-)затратам отличаются записи v[i] и a[i], если v - vector, a - массив, созданный при помощи new.

Цитата(vinter @  21.4.2007,  17:30 Найти цитируемый пост)
да и если бы вектор был действительно лучшим по всем параметром, он бы давно стал заменой new\delete а этого не происходит..
это просто удобная обёртка... тож самое, что сказать, что, "если бы streams были бла-бла-бла, то *printf/*scanf давно бы заменили"...


Цитата(vinter @  21.4.2007,  17:30 Найти цитируемый пост)
дополнительные усилияsmile 
конечно... когда используют new, размер массива не указывают - он сам догадывается...

ну и в итоге... vector и ещё раз vector!


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
vinter
Дата 21.4.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(archimed7592 @  21.4.2007,  17:54 Найти цитируемый пост)
конечно... когда используют new, размер массива не указывают - он сам догадывается...

неа, но мы получаем что vминус new только в операции удаления, а это уже не смертельно
Цитата(archimed7592 @  21.4.2007,  17:54 Найти цитируемый пост)
скажем так: чем по (трудо-, время-)затратам отличаются записи v[i] и a[i], если v - vector, a - массив, созданный при помощи new.

я не знаю как реализован этот оператор, поэтому про него ниче не скажу, а вот push будет раьотать полюбому медленнее.


--------------------
Мой блог
PM MAIL WWW   Вверх
archimed7592
Дата 21.4.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(vinter @  21.4.2007,  18:07 Найти цитируемый пост)
я не знаю как реализован этот оператор, поэтому про него ниче не скажу
стандарт принуждает его работать так же... (inline ф-ций, определённых в классе + отсутствие нужды на проверки границ при использовании оператора - этим он и отличается от vector::at)...

Цитата(vinter @  21.4.2007,  18:07 Найти цитируемый пост)
а вот push будет раьотать полюбому медленнее. 
а кто заставляет использовать push, если в нём нет нужды (объём массива заранее известен)?


Цитата(vinter @  21.4.2007,  18:07 Найти цитируемый пост)
неа, но мы получаем что vминус new только в операции удаления, а это уже не смертельно
не совсем понял как это относится к дополнительным усилиям...
точнее, ты сейчас сказал, что для вектора усилий нужно меньше (не нужно напрягаться об удалении)


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
vinter
Дата 21.4.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Код

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
using std::cout;
using std::cin;
using std::endl;
using std::string;
                  

int main()
{
    clock_t start = clock();
    std::vector <int> aArray(50000000);//26432
    //int *pArray = new int[50000000];//1572
    for(int i = 0; i < 50000000; ++i)
        //*(pArray + i) = 5;
        aArray[i] = 5;
    //delete []pArray;
    cout << (clock() - start) << endl;
    cin.sync();
    cin.get();
    return EXIT_SUCCESS;
}


результат new\delete - 1572
результат вектора - 26432, думая дальнейший спор не уместен, а преимущество более чем в 10 раз, само за себя говорит. 
компилилось в VS2003, дебаг 


--------------------
Мой блог
PM MAIL WWW   Вверх
nickless
Дата 21.4.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Хм, а у меня (gcc 4.1.2) результаты:
вектор: 3750 без оптимизации, 630 с -O2
new/delete: 1000 без оптимизации, 450 с -О2
Получается верктор только в 1,4 раза медленее, имхо если не нужно выжимать последние миллисекунды - самое то.


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
vinter
Дата 21.4.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



если release то 1400 и 700, но все равно разница ощутима. и это хороший аргумент в пользу new


--------------------
Мой блог
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.