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

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

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

Author24 — интернет-сервис помощи студентам
Всем привет! Решил разобраться с векторами. Написал программку. На выводе ожидал увидеть 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2011, 19:57
Ответы с готовыми решениями:

Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты?
Вопрос прост: как при выходе из функции сохранить объекты, которые были созданы в данной функции...

Работа с указателями на объекты
Приветствую, подскажите как корректнее создать кучу объектов и передать указатели на эти объекты в...

Манипуляция указателями на объекты класса
Приветствую Есть несколько похожих классов с методами, различающимися реализацией, которые должны...

Вектор с указателями
Доброго времени суток, есть такой код: // 1159.cpp : Defines the entry point for the console...

10
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 20:02 2
вот:
v.insert(v.end(), oxi);
Поставь просто v[i] = oxi;
1
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.05.2011, 20:09 3
Или измените 14 строку на:
C++
1
vector<Xray*> v;
1
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 20:11 4
Цитата Сообщение от neske Посмотреть сообщение
Или измените 14 строку на:
C++
1
vector<Xray*> v;
И так можно.
Тогда вместо v.insert() гораздо лучше ставить v.push_back().
1
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.05.2011, 20:11 5
Да, вы правы, push_back в таком случае будет лучше смотреться.
1
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)
для НЕ встроенных типов это принципиально

1
3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73
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;
На сколько элементов резервируется место в данном случае?
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 20:30 8
Цитата Сообщение от exkilla Посмотреть сообщение
На сколько элементов резервируется место в данном случае?
Там внутри - зависит от реализации. Но для того, кто использует - элементов нет. Нужно добавлять каждый элемент операцией v.push_back(элемент);
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
03.05.2011, 20:55 9
Цитата Сообщение от exkilla Посмотреть сообщение
После того, как мне уже не будут нужны объекты, каким образом мне освободить занимаемую память? Просто вызвать метод clear?
Нет, вызвать delete для каждого элемента.
Цитата Сообщение от exkilla Посмотреть сообщение
Объясните пожалуйста почему.
Потому что постфиксная запись предполагает создание временного объекта.
Цитата Сообщение от exkilla Посмотреть сообщение
На сколько элементов резервируется место в данном случае?
Для тебя, как для пользователя контейнером, в нём ровно v.size() элементов )
1
3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73
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.
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
03.05.2011, 21:17 11
Цитата Сообщение от exkilla Посмотреть сообщение
Верно, но я имел в виду v.capacity() =) Проверил. После создания вектора равно 0.
даже это не означает что там не выделена память
0
03.05.2011, 21:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2011, 21:17
Помогаю со студенческими работами здесь

Вектор указателей на объекты класса
Добрый вечер! Есть базовый класс Place от него наследуется класс City. Мне нужно реализовать...

Вектор, содержащий объекты класса
Нужно определить класс, содержащий строку и значение, и создать вектор, который содержит объекты...

Можно ли помещать в вектор разные объекты?
у меня разные 3 вида объекта. Но у них есть несколько общих свойств, по которым нужно будет сделать...

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить...


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

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