Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
1

Стандартный векторный контейнер

14.08.2013, 17:09. Показов 1471. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
"Обычно элементы создаются с помощью оператора new() и освобождаются с помощью оператора delete(), т.е. для создания нового элемента вызывается стандартный конструктор класса Т. Это служит еще одним аргументом в пользу явного определения стандартного конструктора в создаваемых классах. Если этого не сделать, то нельзя будет использовать стандартный векторный контейнер для хранения объектов пользовательского класса"
Вопрос: почему для использования стандартного векторного контейнера необходимо явно определять стандартный конструктор класса? Ведь, стандартный конструктор класса, даже, если мы его не определили, он все равно создается компилятором.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2013, 17:09
Ответы с готовыми решениями:

Класс как стандартный контейнер
Здорова господа! Опять есть условие задачи: Напишите такие классы, чтобы Vector из 16.2.1 и...

Приватный конструктор и стандартный контейнер. Два барана на мосту
Всем суп! Итак, банальная вещь - в заголовке - не желает компилироваться. Суть, немного...

Как динамически создать стандартный контейнер данных с элементами такого же типа, как полученный экземпляр?
Всем привет! Имеет интерфейс и его реализация. Необходимо, чтобы в классе SomeActiv в его методе...

Стандартный контрол (контейнер) который мог бы в себе содержать элементы управления.
Подскажите, есть какой либо стандартный контрол (контейнер) который мог бы в себе содержать...

7
Неэпический
18099 / 10685 / 2061
Регистрация: 27.09.2012
Сообщений: 26,895
Записей в блоге: 1
14.08.2013, 17:15 2
Цитата Сообщение от Erjay Посмотреть сообщение
Ведь, стандартный конструктор класса, даже, если мы его не определили, он все равно создается компилятором.
Если только нет других конструкторов
Цитата Сообщение от Erjay Посмотреть сообщение
Если этого не сделать, то нельзя будет использовать стандартный векторный контейнер для хранения объектов пользовательского класса"
Почему?
1
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
14.08.2013, 17:18  [ТС] 3
Croessmah,
Цитата Сообщение от Croessmah Посмотреть сообщение
Почему?
То есть, все таки, можно будет?! Это, кстати, из книги Либерти.
0
Неэпический
18099 / 10685 / 2061
Регистрация: 27.09.2012
Сообщений: 26,895
Записей в блоге: 1
14.08.2013, 17:27 4
Цитата Сообщение от Erjay Посмотреть сообщение
То есть, все таки, можно будет?
http://ideone.com/0MedUY
Цитата Сообщение от Erjay Посмотреть сообщение
Обычно элементы создаются с помощью оператора new() и освобождаются с помощью оператора delete()
не факт!
1
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
14.08.2013, 18:07 5
Цитата Сообщение от Croessmah Посмотреть сообщение
Почему?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
 
class A
{
public:
   A(int x_)
       :x(x_)
   {}
 
private:
   int x ;
} ;
 
int main()
{
   std::vector<A>   vec(5);
}
0
Эксперт С++
8482 / 6149 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.08.2013, 18:25 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
 
class A
{
public:
   A(int x_)
       :x(x_)
   {}
 
private:
   int x ;
} ;
 
int main()
{
   std::vector<A> vec(5,4); // size=5, val=4;
}
C++
1
2
explicit vector (size_type n, const value_type& val = value_type(),
                 const allocator_type& alloc = allocator_type());
http://www.cplusplus.com/refer... or/vector/
1
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.08.2013, 18:31 7
Erjay, у шаблона вектор много конструкторов и не обязательно требовать наличие конструктора по умолчанию. Тему проще понять на примере инициализации динамического массива.
Дело в том, что при выделении памяти под переменную одиночного значения, язык предоставляет возможность сразу его инициализировать необходимым значением:
C++
1
int *b = new int(123);//выделение и инициализация. Для динамических массивов это невозможно.
но нет возможности так поступить с массивом. Нельзя написать, что-то похожее на:
C++
1
int *c = new int[]({1, 2, 3});  //было бы удобно но ничего подобного нет)
Возможна, например запись:
C++
1
int *c = new int[3];
которая не в состоянии принять каких либо значений для инициализации, она только выделяет память. Для int например, эта память вообще не инициализируется и содержит мусор.
Зато если есть конструктор по умолчанию (от компилятора или определённый явно, неважно), то компилятор знает что ему делать видя запись:
C++
1
MyClass *d = new MyClass[3];
Оператор выделения памяти трижды вызовет конструктор по умолчанию.
1
Эксперт С++
8482 / 6149 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.08.2013, 18:36 8
Цитата Сообщение от Erjay Посмотреть сообщение
Вопрос: почему для использования стандартного векторного контейнера необходимо явно определять стандартный конструктор класса?
Для того что бы в дальнейшем не думать откуда ошибки лезут...

Если конструируешь класс то нужно предусмотреть стандартный, полный и понятный интерфейс для другого программиста...
Если "конструкция" изначально специфическая то естественно чего-то может не быть или работать не стандартно, в том числе какого-то конструктора может не быть...
1
14.08.2013, 18:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2013, 18:36
Помогаю со студенческими работами здесь

Заменить контейнер vector, использовавшийся для хранения текстовых строк (листинг 2.3), на контейнер list
Здравствуйте форумчане, может кто объяснить как делать это задание и что собственно мы тут вообще...

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

Векторный макет
Привет всем! Объясните мне пожалуйста зачем делают макеты страниц сайтов в AI а не в PhotoShop? В...

Векторный анализ
Здравствуйте:) Дана задача: Векторная сумма трёх векторов a, b, c равна нулю. Абсолютные значения...

Графический векторный редактор
Здравствуйте, в вузе дали тему курсовой: Графический векторный редактор. Основная библиотека для...

Векторный анализ - основы
Всем привет! Помогите, пожалуйста, посчитать: r = xi+yj+zk. div |r| grad |r| rot |r| Не...


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

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