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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как из функции вернуть пустой std::map? 
V
    Опции темы
Alca
Дата 7.5.2009, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Как из функции вернуть пустой std::map?


--------------------
PM WWW ICQ Skype Jabber   Вверх
zim22
Дата 7.5.2009, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Код

return std::map<int, std::string>();



--------------------
PM MAIL   Вверх
azesmcar
Дата 7.5.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Alca

Код

std::map<int, int> foo() {
   return std::map<int, int>();
}


а зачем?
вообще нехорошо это, по ссылке лучше передавать
Код

void foo(std::map<int, int>& r) {
}

опоздал smile 

Это сообщение отредактировал(а) azesmcar - 7.5.2009, 13:43
PM   Вверх
Alca
Дата 7.5.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



zim22, azesmcar, спасибо. Я так и делал, но колмпилер не хавал.
Оказалось, что лажа была другом месте - в макросе.

Цитата

вообще нехорошо это, по ссылке лучше передавать





--------------------
PM WWW ICQ Skype Jabber   Вверх
azesmcar
Дата 7.5.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Alca

там в самом вопросе написано
Цитата

(без передачи std::map по ссылке или указателю в функцию)


Ну...надо так надо smile


Это сообщение отредактировал(а) azesmcar - 7.5.2009, 13:48
PM   Вверх
Alca
Дата 7.5.2009, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

Ну...надо так надо


Там тесты есть. Я делал и так и так - результат сильно не отличается...

Добавлено @ 13:53
azesmcar, попробуй сам потести.

Это сообщение отредактировал(а) Alca - 7.5.2009, 14:03


--------------------
PM WWW ICQ Skype Jabber   Вверх
azesmcar
Дата 7.5.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Alca @  7.5.2009,  13:52 Найти цитируемый пост)
azesmcar, попробуй сам потетсти. 

ОК, проверю. Но тесты - это не гарантия. Гарантию дает С++ стандарт, где ясно сказано что при возвращении по значению - вызывается копирующий конструктор. Подсчетом ссылок мап не обладает, а значит данные будут скопированы. Что там натворит оптимизатор - сейчас посмотрю. Но писать код, который будет работать быстро/медленно в зависимости от оптимизатора по любому не стоит smile

Это сообщение отредактировал(а) azesmcar - 7.5.2009, 14:03
PM   Вверх
azesmcar
Дата 7.5.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Alca

Вот и результаты тестов подоспели smile 
Все тесты проводились в релиз версии, на Visual Studio 2008
тестируемый код
Код

typedef std::map<int, std::string> strmap;
void foo1(strmap& mp)
{
    std::string v = "123456789123456789123456789123456789123456789";

    for (int i = 0; i < 1000000; ++i)
    {
        mp.insert(strmap::value_type(i, v));
    }
}
strmap foo2()
{
    strmap mp;
    std::string v = "123456789123456789123456789123456789123456789";

    for (int i = 0; i < 1000000; ++i)
    {
        mp.insert(strmap::value_type(i, v));
    }
    return mp;
}


Цитата

вызвращение по значению
Оптимизация: выключена
3250

Оптимизация: включена
688
--------------------------------------------
возвращение по ссылке
Visual Studio 2008
Оптимизация: выключена
2000

Оптимизация: включена
688
--------------------------------------------

Разница 1250 милисекунд. Более секунды. Оптимизатор вероятно просто заинлайнил эту функцию, потому никакой разницы нет при включенном оптимизаторе.. но другой компилятор может так не поступить, причем это даже зависит от функции, будет она инлайн, или нет..может сейчас она и будет, но добавим завтра в нее пару вызовов и получим в результате спад производительности.

PM   Вверх
Alca
Дата 7.5.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Можно даже тоже самое проделать с мапом более внушительного размера - будет тоже самое.

Добавлено через 1 минуту и 41 секунду
Цитата

Но писать код, который будет работать быстро/медленно в зависимости от оптимизатора по любому не стоит

 smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
azesmcar
Дата 7.5.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Alca @  7.5.2009,  14:22 Найти цитируемый пост)
Можно даже тоже самое проделать с мапом более внушительного размера - будет тоже самое.

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

PM   Вверх
Alca
Дата 7.5.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



 smile , ты не понял. Просто размер мапа не влияет на скорость возврата значения по ссылке или по значению.


--------------------
PM WWW ICQ Skype Jabber   Вверх
azesmcar
Дата 7.5.2009, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Alca @  7.5.2009,  14:33 Найти цитируемый пост)
 smile , ты не понял. Просто размер мапа не влияет на скорость возврата значения по ссылке или по значению. 

если оптимизация отключена - влияет.
см. тесты

Цитата(azesmcar @  7.5.2009,  13:59 Найти цитируемый пост)
а писать код, который будет работать быстро/медленно в зависимости от оптимизатора по любому не стоит 



Это сообщение отредактировал(а) azesmcar - 7.5.2009, 14:35
PM   Вверх
J0ker
Дата 7.5.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Alca @  7.5.2009,  14:33 Найти цитируемый пост)
ты не понял. Просто размер мапа не влияет на скорость возврата значения по ссылке или по значению

это что-то новенькое
инлайнинг выключите и посмотрите
а вообще лучше матчасть поучите


--------------------
user posted image
PM MAIL   Вверх
Alca
Дата 7.5.2009, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

это что-то новенькое
инлайнинг выключите и посмотрите
а вообще лучше матчасть поучите

А кто сказал что я собирался не инлайнить?


--------------------
PM WWW ICQ Skype Jabber   Вверх
J0ker
Дата 7.5.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Alca @  7.5.2009,  17:38 Найти цитируемый пост)
А кто сказал что я собирался не инлайнить?

а кто сказал, что компилятор учитывает ваше выраженнное вербально нежелание инлайнить


--------------------
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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