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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
#1

Создать единый класс с шаблонными векторами - C++

30.03.2014, 23:59. Просмотров 326. Ответов 14
Метки нет (Все метки)

Здравствуйте, уважаемые. Возник 1 вопрос при написании шаблонного класса: как сделать так, чтоб при создании объекта класса конструктор сразу же "вставлял" новый элемент в соответствующий вектор (функция push_back() без параметра в конструкторе, если такое возможно):
C++
1
2
3
4
5
6
7
8
9
10
template<class T, class U> class Pair {
private:
    T first;
    U second;
public:
    Pair(T some_first, U some_second): first(some_first), second(some_second) { /* функция push_back */  }
    T& get_first() { return first; }
    U& get_second() { return second; }
    vector<Pair<T,U>> vec; // целевой вектор;
};
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2014, 23:59     Создать единый класс с шаблонными векторами
Посмотрите здесь:

Создать класс, для работы с динамическими векторами - C++
Создать класс, для работы с динамическими векторами, длины n. В класс реализовать операцию вычитания векторов ввода и вывода в поток....

Класс для работы с векторами. - C++
Помогите добавить возможность ввода своих данных(размерности, самих чисел) #include &quot;iostream&quot; #include &lt;math.h&gt; using namespace std;...

Класс для работы с битовыми векторами - C++
Створити клас Bitv для роботи з бітовими векторами довільної довжини. Бітовий вектор – послідовність значень, які можуть мати значення 0...

Класс вектор на основе класса Complex. Найти угол между векторами - C++
класс вектор на основе класса комплекс найти кут между векторами...

Не работает программа с шаблонными функциями - C++
Дана целочисленная прямоугольная матрица . Напишите программу, определяющую величины: 1) количество элементов матрицы, меньших величины...

Не получается сделать 3 класса шаблонными. - C++
Есть три класса + функция main, в которой используются эти классы. Все работает. Сделал эти три класса шаблонными. В main в объявлении...

typename. Проблемы с вложенными шаблонными типами - C++
Здравствуйте. Реализовываю шаблонный список. /* * List.h */ #pragma once #include &lt;iostream&gt; using namespace std;

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6917 / 4110 / 940
Регистрация: 30.01.2014
Сообщений: 6,905
31.03.2014, 00:02     Создать единый класс с шаблонными векторами #2
Цитата Сообщение от Sentipar Посмотреть сообщение
C++
1
vector<Pair<T,U>> vec; // целевой вектор;
Пока все это странно выглядит. Вектор именно внутри Pair?
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
31.03.2014, 00:04  [ТС]     Создать единый класс с шаблонными векторами #3
Да я знаю. Я просто хочу, чтоб при инициализации нового объекта Pair, этот объект записывался в соответствующий вектор.
DrOffset
6917 / 4110 / 940
Регистрация: 30.01.2014
Сообщений: 6,905
31.03.2014, 00:12     Создать единый класс с шаблонными векторами #4
Sentipar, так если вектор внутри Pair, то даже если сделать запись туда, то в нем всегда будет один элемент. Нужно именно такое поведение?
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
31.03.2014, 00:15  [ТС]     Создать единый класс с шаблонными векторами #5
Ага, вот теперь до меня дошло. Нет, не совсем, задумка была в том, чтоб записывать в вектор разные пары значений. Но вот теперь я понял насколько это глупо. Лучше определить вектор вне класса и записывать туда значения, не так ли?
DrOffset
6917 / 4110 / 940
Регистрация: 30.01.2014
Сообщений: 6,905
31.03.2014, 00:16     Создать единый класс с шаблонными векторами #6
Цитата Сообщение от Sentipar Посмотреть сообщение
Лучше определить вектор вне класса и записывать туда значения, не так ли?
Да, именно так.
Хотя если интересно я могу дать ответ и на первоначальный вопрос:
C++
1
2
3
4
5
6
7
8
9
10
11
template<class T, class U>
class Pair {
private:
    T first;
    U second;
public:
    Pair(T some_first, U some_second): first(some_first), second(some_second) { vec.push_back(*this); }
    T& get_first() { return first; }
    U& get_second() { return second; }
    vector<Pair<T,U>> vec;
};
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
31.03.2014, 00:18  [ТС]     Создать единый класс с шаблонными векторами #7
Я почему то так и думал, но побоялся использовать (*this) ибо не знал до конца, к чему приведёт эта конструкция. Спасибо.

Если я хочу при создании идентичных объектов класса Pair записывать их в вектор мне нужно определить вектор вне класса и в конструкторе класса задействовать описанную вами конструкцию?
C++
1
 vec.push_back(*this);
DrOffset
6917 / 4110 / 940
Регистрация: 30.01.2014
Сообщений: 6,905
31.03.2014, 00:25     Создать единый класс с шаблонными векторами #8
Цитата Сообщение от Sentipar Посмотреть сообщение
Я почему то так и думал, но побоялся использовать (*this)
Правильно побоялся. Здесь могут быть нежелательные сайдэффекты.

Цитата Сообщение от Sentipar Посмотреть сообщение
Если я хочу при создании идентичных объектов класса Pair записывать их в вектор мне нужно определить вектор вне класса и в конструкторе класса задействовать описанную вами конструкцию?
Не совсем. Например так:
C++
1
vec.push_back(Pair<int, int>(1, 1));
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
31.03.2014, 00:28  [ТС]     Создать единый класс с шаблонными векторами #9
Это я понимаю, но есть ли вариант, при котором мне не нужно писать каждый раз функцию push_back()? Т.е. класс Pair будет автоматически вписывать однородные объекты при заданном векторе?
DrOffset
6917 / 4110 / 940
Регистрация: 30.01.2014
Сообщений: 6,905
31.03.2014, 00:31     Создать единый класс с шаблонными векторами #10
Sentipar, не совсем ясно зачем это может понадобиться делать? Опиши лучше свою задачу, чтобы мне не гадать и потенциально правильный совет дать.
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
31.03.2014, 00:34  [ТС]     Создать единый класс с шаблонными векторами #11
DrOffset, Задача примерно состоит в том что нужно сделать таблицу пар любых допустимых типов ("Имя - значение") и затем записать их в вектор для вывода на экран.
DrOffset
6917 / 4110 / 940
Регистрация: 30.01.2014
Сообщений: 6,905
31.03.2014, 00:41     Создать единый класс с шаблонными векторами #12
Sentipar, так ведь вектор сам может служить такой таблицей. Даже если таблица - это сторонний объект, то записывать ее в вектор только для того, что бы вывести на экран тоже не нужно. Можно ведь сразу это (выводит на экран) делать, напрямую из таблицы. В конце концов, если таблица - это родитель вектора, то можно сделать метод у нее, который сгенерирует нужный вектор из элементов таблицы.

Цитата Сообщение от Sentipar Посмотреть сообщение
Т.е. класс Pair будет автоматически вписывать однородные объекты при заданном векторе?
Нет никаких причин возлагать эту ответственность на класс Pair. Это походит на то, что вот родился ребенок и сам тут же выбрал себе имя, место работы и все остальное. Но в реальной жизни всем очевидно, что это вне зоны его ответственности. Почему здесь должно быть иначе?
Однако есть задачи, где может потребоваться регистрировать созданные объекты в каком-то глобальном контейнере. И можно эту регистрацию проводить из самого объекта. Но это требует наложения определенных условий на способ создания таких объектов. При такой же постановке вопроса, как у тебя (судя по коду), этот вариант не подойдет.
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
31.03.2014, 00:49  [ТС]     Создать единый класс с шаблонными векторами #13
Примерно вот так, если не ошибаюсь:
C++
1
    Pair(T some_first, U some_second): first(some_first), second(some_second) { cout << *this << endl; }
при
C++
1
2
3
4
 template<class T, class U> ostream& operator<< (ostream& os, Pair<T,U> pair) {
    os << pair.get_first() << ' ' << pair.get_second();
    return os;
}
А что если я хочу фиксировать созданный объект в произвольном контейнере, например?
DrOffset
6917 / 4110 / 940
Регистрация: 30.01.2014
Сообщений: 6,905
31.03.2014, 00:53     Создать единый класс с шаблонными векторами #14
Цитата Сообщение от Sentipar Посмотреть сообщение
А что если я хочу фиксировать созданный объект в произвольном контейнере, например?
Я думаю, что для простоты (на данном этапе постижения информации) тебе стоит считать, что право распоряжаться объектом (класть его в контейнеры, удалять, копировать и т.д.) должен иметь тот уровень исполнения, который его (объект) создал. Тогда все намного упростится.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 00:55     Создать единый класс с шаблонными векторами
Еще ссылки по теме:

Создать класс - C++
Создать класс содержащий следующие поля: -фамилия -группа -средний бал В классе указать -функции для инициализации -функции...

Создать класс - C++
Здравствуйте. Имеется код(исправный) программы для деления многочлена на многочлен. Подскажите пожалуйста как мне создать класс на основе...

Создать класс! - C++
Создать класс для ПРИНТЕРОВ(можно для чего угодно: Автомобилей, Телефонов и т.д.). Что нам надо: Необходимо разработать иерархию...

создать класс - C++
Создать класс который содержит в закрытой области содержит какие либо данные, а пользователь через интерфейс этого класса может получить...

Создать класс - C++
Создать класс &lt;имя класса&gt; (имя класса задается в соответствии с выбранным вариантом), содержащий поля, которые можно использовать для...


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

Или воспользуйтесь поиском по форуму:
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
31.03.2014, 00:55  [ТС]     Создать единый класс с шаблонными векторами #15
DrOffset, Благодарю, и до новых встреч.
Yandex
Объявления
31.03.2014, 00:55     Создать единый класс с шаблонными векторами
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru