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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
exkilla
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 68
#1

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

03.05.2011, 19:57. Просмотров 2458. Ответов 10
Метки нет (Все метки)

Всем привет! Решил разобраться с векторами. Написал программку. На выводе ожидал увидеть 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++ Вектор, содержащий объекты класса
Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты? C++
C++ Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт С++
1016 / 795 / 48
Регистрация: 30.04.2011
Сообщений: 1,614
03.05.2011, 20:02     Вектор с указателями на объекты #2
вот:
v.insert(v.end(), oxi);
Поставь просто v[i] = oxi;
neske
1455 / 822 / 68
Регистрация: 26.03.2010
Сообщений: 2,810
03.05.2011, 20:09     Вектор с указателями на объекты #3
Или измените 14 строку на:
C++
1
vector<Xray*> v;
ValeryLaptev
Эксперт С++
1016 / 795 / 48
Регистрация: 30.04.2011
Сообщений: 1,614
03.05.2011, 20:11     Вектор с указателями на объекты #4
Цитата Сообщение от neske Посмотреть сообщение
Или измените 14 строку на:
C++
1
vector<Xray*> v;
И так можно.
Тогда вместо v.insert() гораздо лучше ставить v.push_back().
neske
1455 / 822 / 68
Регистрация: 26.03.2010
Сообщений: 2,810
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
Эксперт С++
1016 / 795 / 48
Регистрация: 30.04.2011
Сообщений: 1,614
03.05.2011, 20:30     Вектор с указателями на объекты #8
Цитата Сообщение от exkilla Посмотреть сообщение
На сколько элементов резервируется место в данном случае?
Там внутри - зависит от реализации. Но для того, кто использует - элементов нет. Нужно добавлять каждый элемент операцией v.push_back(элемент);
rangerx
1920 / 1529 / 139
Регистрация: 31.05.2009
Сообщений: 2,892
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     Вектор с указателями на объекты
Еще ссылки по теме:

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов C++
Работа с указателями на объекты C++
матрица на вектор, вроде правильно, а вектор на матрицу? посмотрите пожалуйста? C++
Почему матрица на вектор умножается быстрее чем вектор на матрицу? 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     Вектор с указателями на объекты
Ответ Создать тему
Опции темы

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