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

Вектор с указателями на объекты - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
exkilla
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 68
03.05.2011, 19:57     Вектор с указателями на объекты #1
Всем привет! Решил разобраться с векторами. Написал программку. На выводе ожидал увидеть 10 случайных числ. Но получаю краш приложения. Подскажите пожалуйста, что я делаю не так.
Код
#include <iostream>
#include <vector>
using namespace std;

class Xray
{
	public:
		int id;
};

int main()
{
	Xray * oxi;
	vector<Xray*> v(10);

	for(int i = 0; i < 10; i++)
	{
		oxi = new Xray;
		oxi->id = rand();
		v.insert(v.end(), oxi);
	}

	for(vector<Xray*>::iterator it = v.begin(); it!=v.end(); it++)
		cout << (*it)->id << endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 19:57     Вектор с указателями на объекты
Посмотрите здесь:

Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы C++
C++ Есть квадратная матрица А порядка n и вектор b с n элементами. Получить вектор Аb.
C++ В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты начинают двигаться
Вектор с указателями C++
C++ Вектор, содержащий объекты класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.05.2011, 20:02     Вектор с указателями на объекты #2
вот:
v.insert(v.end(), oxi);
Поставь просто v[i] = oxi;
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
03.05.2011, 20:09     Вектор с указателями на объекты #3
Или измените 14 строку на:
C++
1
vector<Xray*> v;
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.05.2011, 20:11     Вектор с указателями на объекты #4
Цитата Сообщение от neske Посмотреть сообщение
Или измените 14 строку на:
C++
1
vector<Xray*> v;
И так можно.
Тогда вместо v.insert() гораздо лучше ставить v.push_back().
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
03.05.2011, 20:11     Вектор с указателями на объекты #5
Да, вы правы, push_back в таком случае будет лучше смотреться.
rangerx
03.05.2011, 20:19
  #6

Не по теме:

Цитата Сообщение от exkilla Посмотреть сообщение
for(vector<Xray*>::iterator it = v.begin(); it!=v.end(); it++)
for(vector<Xray*>::iterator it = v.begin(); it!=v.end(); ++it)
для НЕ встроенных типов это принципиально

exkilla
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 68
03.05.2011, 20:28  [ТС]     Вектор с указателями на объекты #7
Спасибо. Работает.

После того, как мне уже не будут нужны объекты, каким образом мне освободить занимаемую память? Просто вызвать метод clear?

Цитата Сообщение от rangerx Посмотреть сообщение

Не по теме:


for(vector<Xray*>::iterator it = v.begin(); it!=v.end(); ++it)
для НЕ встроенных типов это принципиально

Объясните пожалуйста почему.

Цитата Сообщение от neske Посмотреть сообщение
Или измените 14 строку на:
C++
1
vector<Xray*> v;
На сколько элементов резервируется место в данном случае?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.05.2011, 20:30     Вектор с указателями на объекты #8
Цитата Сообщение от exkilla Посмотреть сообщение
На сколько элементов резервируется место в данном случае?
Там внутри - зависит от реализации. Но для того, кто использует - элементов нет. Нужно добавлять каждый элемент операцией v.push_back(элемент);
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
03.05.2011, 20:55     Вектор с указателями на объекты #9
Цитата Сообщение от exkilla Посмотреть сообщение
После того, как мне уже не будут нужны объекты, каким образом мне освободить занимаемую память? Просто вызвать метод clear?
Нет, вызвать delete для каждого элемента.
Цитата Сообщение от exkilla Посмотреть сообщение
Объясните пожалуйста почему.
Потому что постфиксная запись предполагает создание временного объекта.
Цитата Сообщение от exkilla Посмотреть сообщение
На сколько элементов резервируется место в данном случае?
Для тебя, как для пользователя контейнером, в нём ровно v.size() элементов )
exkilla
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 68
03.05.2011, 21:12  [ТС]     Вектор с указателями на объекты #10
Цитата Сообщение от rangerx Посмотреть сообщение
Нет, вызвать delete для каждого элемента.
Верно?
Код
	for(vector<Xray*>::iterator it = v.begin(); it!=v.end(); ++it)
		delete (*it);
Цитата Сообщение от rangerx Посмотреть сообщение
Потому что постфиксная запись предполагает создание временного объекта.
Спасибо.
Цитата Сообщение от rangerx Посмотреть сообщение
Для тебя, как для пользователя контейнером, в нём ровно v.size() элементов )
Верно, но я имел в виду v.capacity() =) Проверил. После создания вектора равно 0.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2011, 21:17     Вектор с указателями на объекты
Еще ссылки по теме:

Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты? C++
Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов C++
Работа с указателями на объекты C++

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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
03.05.2011, 21:17     Вектор с указателями на объекты #11
Цитата Сообщение от exkilla Посмотреть сообщение
Верно, но я имел в виду v.capacity() =) Проверил. После создания вектора равно 0.
даже это не означает что там не выделена память
Yandex
Объявления
03.05.2011, 21:17     Вектор с указателями на объекты
Ответ Создать тему
Опции темы

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