С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
1

Что выбрать: пользовательский цикл или стандартный алгоритм с предикатом

24.07.2014, 15:45. Показов 1473. Ответов 20
Метки нет (Все метки)

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

Рассмотрим код (C++03, не C++11):
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <string>
 
typedef std::pair<int, std::string> InputPair;
typedef std::map<int, std::string> InputContainer;
typedef std::list<std::string> OutputContainer;
 
void copyPart_Ver1( OutputContainer& oc, const InputContainer& ic )
{
    for( InputContainer::const_iterator it=ic.begin(); it!=ic.end(); ++it )
    {
        oc.push_back(it->second);
    }
}
 
struct TakeSecond
{
    std::string operator()( const InputPair& p ) const
    {
        return p.second;
    }
};
 
void copyPart_Ver2( OutputContainer& oc, const InputContainer& ic )
{
    std::transform(ic.begin(), ic.end(), std::back_inserter(oc), TakeSecond() );
}
 
int main() {
 
    InputContainer ic;
    
    ic[1] = "one";
    ic[2] = "two";
 
    std::ostream_iterator<std::string> oi( std::cout, " " );
 
    OutputContainer oc1;
    copyPart_Ver1( oc1, ic );
    std::copy( oc1.begin(), oc1.end(), oi );
    std::cout << std::endl;
    
    OutputContainer oc2;
    copyPart_Ver2( oc2, ic );
    std::copy( oc2.begin(), oc2.end(), oi );    
    std::cout << std::endl;
 
    return 0;
}
http://ideone.com/Gx8VoF



Задача: копирование части информации из одного контейнера в другой.

Самый очевидный и быстрый для написания вариант - это простой цикл (copyPart_Ver1).
Более сложный, но в то же время, использующий стандартный алгоритм, а значит должен быть
лучше понятен читающему код - copyPart_Ver2.

Требуется ваше мнение, какой вариант вы бы предпочли и почему? Или может быть есть другие варианты?

P.S. на C++11 я бы однозначно предпочел второй вариант, заменив конечно функциональный объект лямбдой.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2014, 15:45
Ответы с готовыми решениями:

Алгоритм с применением вложенных базовых структур «цикл с предусловием» или «цикл с постусловием»
Разработать алгоритм с применением вложенных базовых структур «цикл с предусловием» или «цикл с...

Разработать алгоритм с применением вложенных базовых структур «цикл с предусловием» или «цикл с постусловием»
Разработать алгоритм с применением вложенных базовых структур «цикл с предусловием» или «цикл с...

Разработать алгоритм с применением вложенных базовых структур «цикл с предусловием» или «цикл с постусловием», составить
Разработать алгоритм с применением вложенных базовых структур «цикл с предусловием» или «цикл с...

Разработать алгоритм с применением вложенных базовых структур «цикл с предусловием» или «цикл с постусловием», составить
Разработать алгоритм с применением вложенных базовых структур «цикл с предусловием» или «цикл с...

20
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
25.07.2014, 08:50 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от ForEveR Посмотреть сообщение
salam, Что ж. Это странно. Пишете профессионально и прочитали хотя бы пару книг по С++? Я удивлен.
мой уровень действительно совсем не профессиональный.
0
25.07.2014, 08:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2014, 08:50
Помогаю со студенческими работами здесь

Преобразование типа из пользовательского в стандартный и из стандартного в пользовательский
Уважаемые форумчане, нужна ваша помощь в этом вопросе про преобразовния типов. Где об этом...

Передать в пользовательский элемент управления DataTemplate или что-то похожее
У меня есть UserControl, который получает список периодов и располагает их квадратиками на...

Что выбрать - Amd a8 3530mx или intel core i5 2450 или i7 2670qm?
Добрый день помогите выбрать процессор что мне лучше выбрать Amd a8 3530mx или intel core i5 2450...

Что выбрать на данный момент, что рекомендуете: Веб или Андроид?
Что рекомендуете, Андроид или Веб, какая сфера лучше(обе заходят), нравится и разаботка...


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

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