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

STL и собственный класс - C++

Восстановить пароль Регистрация
 
ins1der
0 / 0 / 0
Регистрация: 08.12.2012
Сообщений: 7
26.09.2013, 13:00     STL и собственный класс #1
Подскажите, пожалуйста, как можно переопределить функцию STL для собственного класса. Например, push_front() или push_back() не работают для пользовательского типа. Насколько я понимаю, нужно переопределить функцию STL непосредственно в своем классе, только как это сделать?

main.cpp
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
#include "stdafx.h"
#include <list>
#include <iostream>
#include "MyClass.h"
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    list<MyClass> coll;
    coll.push_back(0, 'c'); // ошибка, отсутствует экземпляр перегруженной функции
    coll.pop_back(); // нет ошибки, функцию перегружать не нужно
 
    return 0;
}
 
MyClass.h
 
class MyClass
{
public:
    MyClass()
    {
        a = 0;
        c = ' ';
    }
    int a;
    char c;
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
26.09.2013, 13:03     STL и собственный класс #2
Цитата Сообщение от ins1der Посмотреть сообщение
coll.push_back(0, 'c');
push_back() в STL вроде бы принимает один аргумент - значение, которое нужно добавить в конец списка
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
26.09.2013, 13:04     STL и собственный класс #3
а что Вы собственно имели ввиду под
C++
1
coll.push_back(0, 'c');
?
возможно вы хотели:

C++
1
coll.push_back(MyClass(0, 'c')); // ошибка -  в вашем классе нет подходящего конструктора
или
C++
1
coll.push_back(MyClass()); // работает
напишите что Вы хотите сделать
castaway
Эксперт С++
4838 / 2977 / 367
Регистрация: 10.11.2010
Сообщений: 11,009
Записей в блоге: 10
Завершенные тесты: 1
26.09.2013, 13:28     STL и собственный класс #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <list>
 
template <class T> class my_list : public std::list <T> {
public:
    void push_back( const T & value ) {
        std::cout << "you pushed " << value << std::endl;
        ((std::list<T> *)this)->push_back( value );
    }
};
 
int main()
{
    my_list <int> l;
    l.push_back( 1 );
    l.push_back( 20 );
    l.push_back( 300 );
}
ins1der
0 / 0 / 0
Регистрация: 08.12.2012
Сообщений: 7
26.09.2013, 14:51  [ТС]     STL и собственный класс #5
C++
1
coll.push_back(MyClass()); // работает
Действительно, это я велосипед начал изобретать, достаточно в качестве аргумента передать функции конструктор класса. Спасибо.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
26.09.2013, 15:30     STL и собственный класс #6
C++
1
2
3
4
5
6
7
8
9
10
struct Foo
{
    Foo(int a, int b)
        : x(a), y(b) {}
    int x, y;
};
 
    std::vector<Foo> v;
    v.emplace_back(1, 2);
    std::cout << v[0].x << " " << v[0].y;
Yandex
Объявления
26.09.2013, 15:30     STL и собственный класс
Ответ Создать тему
Опции темы

Текущее время: 00:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru