Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите выбрать книгу, для изучения STL 
V
    Опции темы
lllJollyRogerlll
Дата 15.1.2015, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Недавно закончил изучение "Освой самостоятельно С++ за 21 день", Джесс Либерти, Бредли Джонс. Теперь хотелось бы перейти к изучению STL, знаю точно что это необходимо для полноценной работы с языком. При выборе материала остановился на Николае Джосьютисе, "C++ Стандартная библиотека. Для профессионалов." Скачал в DjVu формате и начал изучать. В принципе материал хороший, доступно изложен, все хвалят и т.д. Но вот проблема в том, что я привык учить материал, с помощью "бумажной" версии, физического учебника. А эту книгу негде не купишь. Да и материал староват(или нет?). В общем, если есть что посоветовать на замену, буду рад. Либо если кто готов продать мне Джосьютиса, попробуем договориться ;) Хотя сомневаюсь, что такие найдутся... Спасибо!

В поисках Николая Джосьютиса, "C++ Стандартная библиотека. Для профессионалов." наткнулся на "Стандартная библиотека C++. Справочное руководство", Автор: Николаи М. Джосаттис. Кто знает что за книга, на кого рассчитана? Это случаем не переиздание вышеописанной книги? Не могу ничего о ней найти. Боюсь, что закажу, выкуплю а в итоге - не смогу освоить её.. Спасибо!

Это сообщение отредактировал(а) lllJollyRogerlll - 15.1.2015, 15:01
PM MAIL   Вверх
Cheloveck
Дата 15.1.2015, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Бьерн Страуструп - Язык программирования C++. Специальное издание
user posted image
У меня издание 2010 года и там есть всё, что тебе нужно. 


--------------------
user posted image
PM Jabber   Вверх
lllJollyRogerlll
Дата 15.1.2015, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Cheloveck @ 15.1.2015,  20:42)
Бьерн Страуструп - Язык программирования C++. Специальное издание
user posted image
У меня издание 2010 года и там есть всё, что тебе нужно.

Спасибо, а про "Стандартная библиотека C++. Справочное руководство", Автора: Николаи М. Джосаттис, Вы ничего сказать не можете?
В книге Страуструпа, которую Вы рекомендуете подробно описывается STL?
И на какой уровень знаний она рассчитана?
Извините, что насел с вопросами)
PM MAIL   Вверх
Cheloveck
Дата 15.1.2015, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(lllJollyRogerlll @  15.1.2015,  22:39 Найти цитируемый пост)
про "Стандартная библиотека C++. Справочное руководство", Автора: Николаи М. Джосаттис, Вы ничего сказать не можете?

Не знаю такой

Цитата(lllJollyRogerlll @  15.1.2015,  22:39 Найти цитируемый пост)
В книге Страуструпа, которую Вы рекомендуете подробно описывается STL?

Там целый раздел (~300 страниц) посвящён STL. Я бы сказал, что это слишком подробно =)


--------------------
user posted image
PM Jabber   Вверх
baldina
Дата 15.1.2015, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



lllJollyRogerlllhttp://www.ozon.ru/context/detail/id/1940311/
Страуструп, при всем уважении, не лучший писатель, особенно про stl

Добавлено через 7 минут и 28 секунд
еще вот эту рекомендую
http://forcoder.ru/cpp/c-boost-graph-library-11
она не про stl, но там неплохое описание обобщенного программирования вообще и программирования в стиле stl - это помогает понять концепции, заложенные в stl. да и сама BGL заслуживает внимания
PM MAIL   Вверх
lllJollyRogerlll
Дата 15.1.2015, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(baldina @ 15.1.2015,  22:16)
lllJollyRogerlllhttp://www.ozon.ru/context/detail/id/1940311/
Страуструп, при всем уважении, не лучший писатель, особенно про stl

Написано: "Для опытных программистов". А я только одну книгу изучил, в первом сообщении описано. Так что таковым не являюсь, к сожалению. Да, я понимаю принципы построения классов, шаблонов классов и функций, связанных списков, как устроены основные объекты классов ввода-вывода и так далее. Но опыта у меня как такового нет. Я даже еще не определился куда мне податься и вообще для чего я учу С++(если есть рекомендации, я приму с удовольствием  smile  ). Но за ответ спасибо!

Добавлено через 10 минут и 10 секунд
Цитата(baldina @ 15.1.2015,  22:16)
еще вот эту рекомендую
http://forcoder.ru/cpp/c-boost-graph-library-11
она не про stl, но там неплохое описание обобщенного программирования вообще и программирования в стиле stl - это помогает понять концепции, заложенные в stl. да и сама BGL заслуживает внимания

А вы как считаете, с чего можно начать? Просто в моем учебнике вкратце автор описывает некоторые аспекты STL и дальше рекомендует переходить к изучению непосредственно STL, вот по этому я и поднял тему.. Хотя честно, даже и не знаю куда мне дальше податься. Даже и близко понятия не имею.
PM MAIL   Вверх
baldina
Дата 15.1.2015, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



BGL это для опытных. но скорее опытных в программировании вообще, чем именно в С++
Степанов подойдет в любом случае, если тема STL вас интересует, т.к. изложение без сухости и наукообразия. Но тема сама по себе не элементарная (начинать надо с шаблонов вообще, а уж имея какое-то понятие, можно изучать конкретные библиотеки)
думаю "курса за 21 день" всяко не достаточно. читайте и другие, более толстые книжки, статьи, в т.ч. на общие темы - ООП и обобщенное программирование. 
PM MAIL   Вверх
lllJollyRogerlll
Дата 16.1.2015, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(baldina @ 15.1.2015,  23:39)
BGL это для опытных. но скорее опытных в программировании вообще, чем именно в С++
Степанов подойдет в любом случае, если тема STL вас интересует, т.к. изложение без сухости и наукообразия. Но тема сама по себе не элементарная (начинать надо с шаблонов вообще, а уж имея какое-то понятие, можно изучать конкретные библиотеки)
думаю "курса за 21 день" всяко не достаточно. читайте и другие, более толстые книжки, статьи, в т.ч. на общие темы - ООП и обобщенное программирование.

Это она только так называется, "Освой самостоятельно С++ за 21 день".. На самом деле я эту книгу с пол года мусолил, ее разве что просто прочитать за 21 день возможно, но не изучить.. Там около 800 страниц + задания. А для человека, который вообще в программировании ничего не бум-бум, как говорится - процесс тем более растягивается smile
Вот, что то на подобие этого я вычитал из той книги, о которой говорю, а потом(для проверки самого себя, понял-не понял тему) - воспроизвел. Конечно получилось не так как у автора, но все же:
Код

#include<iostream>

class theExeption{};
class OutOfMemory: public theExeption{};
class OutOfBorder : public theExeption{};
class NoSearchingObject : public theExeption{};

//                                        Детали
class Part
{
public:
    Part(int number) : partNumber(number){}
    virtual ~Part() {}
    int GetPartNumber() const { return partNumber; }
    void SetPartNumber(int number) { partNumber = number; }
    virtual void Display() const = 0;

private:
    int partNumber;
};

void Part::Display() const
{
    std::cout << "Part Number: " << partNumber << std::endl;
}

//                                   Автомобильные детали
class CarPart : public Part
{
public:
    CarPart(int number, int model) : modelYear(model), Part(number){}
    virtual ~CarPart() {}
    int GetModelYear() const { return modelYear; }
    void SetModelYear(int model) { modelYear = model; }
    virtual void Display() const;
private:
    int modelYear;
};

void CarPart::Display() const
{
    Part::Display(); 
    std::cout << "It's model year: " << modelYear << std::endl;
}

std::ostream& operator<<(std::ostream& output, Part * thePart)
{
    thePart->Display();
    return output;
}

//                                   Авиационные детали
class AirplanePart : public Part
{
public:
    AirplanePart(int number, int engine) : engineNumber(engine), Part(number){}
    virtual ~AirplanePart() {}
    int GetEngineNumber() const { return engineNumber; }
    void SetEngineNumber(int engine) { engineNumber = engine; }
    virtual void Display() const; 
private:
    int engineNumber;
};

void AirplanePart::Display() const

    Part::Display(); 
    std::cout << "It's engine number: " << engineNumber << std::endl; 
}

//                              Блок детали(Node) основной элемент списка(List),
//                             содержит указатель на любой объект (Type* itsObject), 
//                          в нашем случае будет содержать детали (Node* itsObject)
//                         а так же указатель на следующи блок детали (Node* theNext)
template<class Type>
class Node
{
public:
    Node(Type * newObject) : itsObject(newObject), theNext(0) {}
    ~Node() { delete itsObject; delete theNext; itsObject = 0; theNext = 0; }
    void SetNext(Node * next) { theNext = next; }
    Node* GetNext() const { return theNext; }
    Type* GetObject() const { return itsObject; }
private:
    Type * itsObject;
    Node * theNext;
};

template<class Type>
std::ostream& operator<<(std::ostream output, Node<Type> * theNode)
{
    theNode->GetObject()->Display();
    return output;
}

//               Список(List), является списком шаблонных объектов Node(контейнеры, содержащие детали)
//    содержит головной контейнер, которы в свою очередь содержит указатель на следующий объект Node и так далее
//                        а так же счетчик общего колличества контейнеров (int itsCount)
template <class Type>
class List
{
public:
    List() : headNode(0), itsCount(0){}
    ~List();
    
    void Iterate() const;
    void Insert(Type * newObject);
    Type* Find(int & offset, int searchingNumber);
    Node<Type>* GetHead() const;

    Type* operator[](int offset);

private:
    Node<Type> * headNode;
    int itsCount;
};

template<class Type>
List<Type>::~List() 

    delete headNode; 
    headNode = 0;
    itsCount = 0;
}

template<class Type>
void List<Type>::Iterate() const
{
    Node<Type>* pNode = headNode;
    for (; pNode != 0; pNode = pNode->GetNext())
    {
        pNode->GetObject()->Display();
    }
}

template<class Type>
void List<Type>::Insert(Type * newObject)
{
    itsCount++;
    if (!headNode)                        // если головного нет, назначить новый - головным
    {
        headNode = new Node<Type>(newObject);
        return;
    }

    int headNodeNumber; 
    headNodeNumber = headNode->GetObject()->GetPartNumber();
    int newNodeNumber;
    newNodeNumber = newObject->GetPartNumber();
    Node<Type>* pNewNode = new Node<Type>(newObject);

    if (headNodeNumber > newNodeNumber)    // если головной блок больше нового, то назначить новый - головным
    {
        pNewNode->SetNext(headNode);
        headNode = pNewNode;
        return;
    }

    Node<Type>* pCurrent = headNode;

    while (1)                            // проверяем следующий блок после текущего, если он больше нового,
    {                                    // вставляем за текущим, если нет - присваиваем текущему - следующий
        if (!pCurrent->GetNext())        //                                                и начинаем цикл заново
        {
            pCurrent->SetNext(pNewNode);
            return;
        }

        int nextPartNumber;                
        nextPartNumber = pCurrent->GetNext()->GetObject()->GetPartNumber();

        if (nextPartNumber > newNodeNumber)
        {
            pNewNode->SetNext(pCurrent->GetNext());
            pCurrent->SetNext(pNewNode);
            return;
        }

        pCurrent = pCurrent->GetNext();
    }
}

template<class Type>
Type* List<Type>::Find(int & offset, int searchingNumber)
{
    if (!headNode) throw NoSearchingObject();
    Node<Type>* pNode = headNode;
    for (offset = 0; pNode != 0; pNode = pNode->GetNext(), offset++)
    {
        if (pNode->GetObject()->GetPartNumber() == searchingNumber)
            break;
    }
    if (!pNode) throw NoSearchingObject();
    else return pNode->GetObject();
}

template<class Type>
Node<Type>* List<Type>::GetHead() const
{
    if (headNode) return headNode;
    else
        throw NoSearchingObject();
}

template<class Type>
Type* List<Type>::operator[](int offset)
{
    if ((offset >= itsCount)||(offset < 0)) throw OutOfBorder();
    else
    {
        Node<Type>* pNode = headNode;
        for (int i = 0; i < offset; i++) { pNode = pNode->GetNext(); }
        return pNode->GetObject();
    }
}

CarPart* NewCarPart();
AirplanePart* NewAirplanePart();

int main()
{
    try
    {
        Part* pPart = 0;
        List<Part> partList;
        bool ifQuit = false;
        int choice;
        while (!ifQuit)
        {
            std::cout << "(0)Exit, (1)Airplane part, (2)Car Part: ";
            std::cin >> choice;
            switch (choice)
            {
            case 0: ifQuit = true; break;
            case 1: pPart = NewAirplanePart();  
                    partList.Insert(pPart);
                    break;
            case 2: pPart = NewCarPart(); 
                    partList.Insert(pPart);
                    break;
            default: continue;
            }
        }
        while (1)
        {
            if (partList.GetHead())partList.Iterate();
            std::cout << "what number in this list would you like get? : ";
            std::cin >> choice;
            choice--;
            std::cout << partList[choice] << std::endl;
        }
    }
    catch (OutOfMemory)
    {
        std::cout << "Out of memory!\n";
    }

    catch (NoSearchingObject)
    {
        std::cout << "Searching object is not found!\n";
    }

    catch (OutOfBorder)
    {
        std::cout << "Out of border!\n";
    }

    catch (...)
    {
        std::cout << "Something gone wrong!\n";
    }
    return 0;
}

AirplanePart* NewAirplanePart() 
{
    int partNumber = 0;
    int engine = 0;
    std::cout << "Please enter part number: ";
    std::cin >> partNumber;
    std::cout << "And engine number: ";
    std::cin >> engine;
    AirplanePart* pPart = new AirplanePart(partNumber, engine);
    return pPart;
}

CarPart* NewCarPart()
{
    int partNumber = 0;
    int year = 0;
    std::cout << "Please enter part number: ";
    std::cin >> partNumber;
    std::cout << "And it's model year: ";
    std::cin >> year;
    CarPart* pPart = new CarPart(partNumber, year);
    return pPart;
}

В общем, может конечно и рано мне, но я попробую Степанова. Если не пойдет, буду искать что попроще. Спасибо!
PM MAIL   Вверх
Alexeis
Дата 16.1.2015, 10:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11740
Регистрация: 12.10.2005
Где: Зеленоград

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



Для меня самая лучшая книга по stl это http://www.cplusplus.com/reference/stl/
Ни где такого подробного и точного изложения не встречал. Но правда это для тех кто уже хоть немного в теме. Просто вот когда любой вопрос возникает, сразу открыл и сразу нахожу четкое строгое исчерпывающее описание по стандарту. Идеальный справочник. 
  Есть еще книга по STL Николая Джосьютиса (Издательство Питер) (700 страниц и все по STL)
  Александр Степанов, Менг Ли (только в электронном виде)
  Л.Аммерааль (240 страниц)
Это на русском. Но я бы ничего из этого не рекомендовал. Русские издания грешат неточностями, вольностями.



--------------------
Vit вечная память.

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

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lllJollyRogerlll
Дата 16.1.2015, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Alexeis @ 16.1.2015,  10:32)
Для меня самая лучшая книга по stl это http://www.cplusplus.com/reference/stl/
Ни где такого подробного и точного изложения не встречал. Но правда это для тех кто уже хоть немного в теме. Просто вот когда любой вопрос возникает, сразу открыл и сразу нахожу четкое строгое исчерпывающее описание по стандарту. Идеальный справочник. 
  Есть еще книга по STL Николая Джосьютиса (Издательство Питер) (700 страниц и все по STL)
  Александр Степанов, Менг Ли (только в электронном виде)
  Л.Аммерааль (240 страниц)
Это на русском. Но я бы ничего из этого не рекомендовал. Русские издания грешат неточностями, вольностями.

Спасибо, но у меня уровень английского средний, сейчас в процессе изучения, к тому же я новичок в программировании, боюсь что будет тяжело читать в оригинале. А вот по поводу Джосьютиса я и спрашивал вначале. Но к сожалению эта книга сейчас не доступна в продаже. Вот по этому думаю брать эту, я так понимаю - что то вроде переиздания. Как вы думаете? Судя по содержанию вроде она.
PM MAIL   Вверх
Alexeis
Дата 16.1.2015, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11740
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(lllJollyRogerlll @  16.1.2015,  13:52 Найти цитируемый пост)
А вот по поводу Джосьютиса я и спрашивал вначале. Но к сожалению эта книга сейчас не доступна в продаже. Вот по этому думаю брать эту, я так понимаю - что то вроде переиздания. Как вы думаете? Судя по содержанию вроде она. 

  Ну старое издание тоже напоминает справочник. Думаю это и есть переиздание. Не уверен что книга подходит в качестве учебника для новичков.
  Для новичков лучше начать с изучения шаблонов и шаблонного программирования, прежде чем изучать STL. Т.е. сначала прочитать Александреску , а потом уже STL как практика шаблонного программирования. По STL в действительности нужен не учебник, а справочник. 


--------------------
Vit вечная память.

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

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Guinness
Дата 16.1.2015, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Alexeis @  16.1.2015,  14:24 Найти цитируемый пост)
.е. сначала прочитать Александреску , а потом уже STL как практика шаблонного программирования.

Прочитать Александреску до изучения STL - очень странный совет. Тем более, что человек говорит, что он только начинает. STL можно начать пользовать и без чтения Александреску, тем более что его книгу сложно назвать элементарной.
Вообще, после начального освоения плюсов, мне для следующего шага, очень помогли книжки такого плана:
Саттер + можно ещё продолжение этой книги
Мейерс


Это сообщение отредактировал(а) Guinness - 16.1.2015, 14:25
PM MAIL   Вверх
Alexeis
Дата 16.1.2015, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11740
Регистрация: 12.10.2005
Где: Зеленоград

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



Guinness, библиотека STL это реализация шаблонов проектирования. Без всяческих понятий устройства STL неправильно браться использовать. Ну допустим книжка подробно описывает тебе все функции, параметры, допустимые значения параметров, но она тебя не научит как проектировать программу с использованием шаблонов проектирования.
  Возможно Александреску не лучшая книга для новичка, но и альтернативы особенно нет. 
Человек использует шаблон, допускает первую ошибку и получает полотно текста на 3 страницы из которого он не в состоянии понять что он сделал не так. А разобраться он не может, потому что без понятия как там все устроено внутри. После чего появляется очередная тема на форуме
"помогите найти ошибку ..." и листинг кода. 
  Пусть сначала напишет свой маленький простейший контейнер, к нему итератор и алгоритм, или хотя бы разберется в исходном коде  примера из книги Александреску, вот тогда можно читать справочник.

  Чтобы начать говн_кодить с использованием STL можно даже книжки не читать. Но это не называется учиться программировать на С++ . Книга Александреску именно учит программировать, она объясняет зачем нужен контейнер, а не как подставить в шаблон класс без конструктора копирования и выдать свету свой первый говн_код, который будет валится на ошибках доступа к памяти. 


--------------------
Vit вечная память.

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

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
baldina
Дата 16.1.2015, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Alexeis @  16.1.2015,  15:57 Найти цитируемый пост)
библиотека STL это реализация шаблонов проектирования

не совсем. пожалуй лишь iterator (можно добавить strategy, но скорее как средство собственной реализации, естественно вытекающее из механизма специализации шаблонов).
скорее можно сказать, что у stl есть своя идеология, и её стоит понять для эффективного использования.
PM MAIL   Вверх
lllJollyRogerlll
Дата 16.1.2015, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile 
Я запутался. Нашел все рекомендованные тут книги и в ступоре. Видимо я вообще рано полез на форум. 
Вот тот код, который я привел в пример - мой максимум на данный момент.
Но и другие учебники, в которых в первой главе история языка, а во второй (std::cout<<"Hello world!\n";) мне читать скучно.
Я думал, что мне нужно дальше учить STL, потому что автор книги, которую я изучал рекомендует далее перейти к изучению STL, но видимо мне рано... В общем всем спасибо, но...  smile  smile 
PM MAIL   Вверх
Google
  Дата 13.11.2019, 05:56 (ссылка)  





  Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Компьютерная литература | Следующая тема »


 




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


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

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