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

Создание объекта std::set - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Курсач "Алгоритм Ершова" http://www.cyberforum.ru/cpp/thread194743.html
Вот, что-то написал такое, естественно позаимствовал куски кода, работает... НО! получается алгоритм раскраски путем перебора вершин! а мне надо алгоритмом Ершова. если надо будет уяснить, что это за...
C++ invalid floating point operation помогите решить вот такую вот задачу: Коэффициенты системы линейных уравнений заданы в виде квадратной матрицы. С помощью допустимых преобразований привести матрицу к треугольному виду. Найти... http://www.cyberforum.ru/cpp/thread194559.html
надо скачать C++
киньте плиз нормальную ссылку от куда можно скачать С++
C++ время запуска/конца выполнения программы с точностью до миллисекунд
С. как сделать чтобы в начале программы выводилась дата и время с миллисекундами и тоже самое при её завершении?
C++ Использование указателя на метод вместо виртуального метода http://www.cyberforum.ru/cpp/thread194194.html
Имеется базовый класс Base. Имеется производный от Base класс Derived. В классе Derived требуется выполнить некоторое действие, которое практически полностью эквивалентно для любого производного от...
C++ Компилятор Здравствуйте. Пишу компилятор pas->asm на с++ Может кто-то подскажет генератор конструкцый или что-то подобное: <переменная1>+<переменная2> mov... подробнее

Показать сообщение отдельно
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
21.11.2010, 20:44
kravam, Не так все просто.
Как ни странно вызывается конструктор по умолчанию (в MSVS).
Но он не совсем конструктор по умолчанию ибо класс все же шаблонный.
Шаблон класса set выглядит так:
C++
1
2
3
4
template<class _Kty,
    class _Pr = less<_Kty>,
    class _Alloc = allocator<_Kty> >
    class set
То есть как видно все кроме типа аргумента - шаблон по умолчанию.

Далее. При написании
C++
1
std::set<int, std::less<int> > S;
Вызывается конструктор
C++
1
2
3
4
    set()
        : _Mybase(key_compare(), allocator_type())
        {   // construct empty set from defaults
        }
Где - key_compare есть переданный шаблон std::less<int>, а аллокатор используется по дефолту.

Добавлено через 5 минут
Из этого конструктора вызывается такой конструктор. Где:
_Parg - значение вернувшееся key_compare() (в нашем случае less<int>), Al - аллокатор (в данном случае по умолчанию).

C++
1
2
3
4
5
6
    explicit _Tree(const key_compare& _Parg,
        const allocator_type& _Al)
        : _Mybase(_Parg, _Al)
        {   // construct empty tree
        _Init();
        }
Добавлено через 3 минуты
При создании объекта допустим таким образом.

C++
1
2
    int Arr[]={5,4,3,2,1};
    std::set<int, std::less<int> > S(Arr, Arr+sizeof(Arr)/sizeof(*Arr));
вызовется
C++
1
2
3
4
5
6
7
8
    template<class _Iter>
        set(_Iter _First, _Iter _Last)
        : _Mybase(key_compare(), allocator_type())
        {   // construct set from [_First, _Last), defaults
        _DEBUG_RANGE(_First, _Last);
        for (; _First != _Last; ++_First)
            this->insert(*_First);
        }
Вот этот конструктор. Где соответственно итераторы - начало, конец последовательности, key_compare() возвращает переданный ШАБЛОННЫЙ тип, ну и аллокатор.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru