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

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

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

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

03.05.2011, 19:57. Просмотров 3006. Ответов 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 19:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вектор с указателями на объекты (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 20:02 #2
вот:
v.insert(v.end(), oxi);
Поставь просто v[i] = oxi;
1
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
03.05.2011, 20:09 #3
Или измените 14 строку на:
C++
1
vector<Xray*> v;
1
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 20:11 #4
Цитата Сообщение от neske Посмотреть сообщение
Или измените 14 строку на:
C++
1
vector<Xray*> v;
И так можно.
Тогда вместо v.insert() гораздо лучше ставить v.push_back().
1
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
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
exkilla
3 / 3 / 0
Регистрация: 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
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 20:30 #8
Цитата Сообщение от exkilla Посмотреть сообщение
На сколько элементов резервируется место в данном случае?
Там внутри - зависит от реализации. Но для того, кто использует - элементов нет. Нужно добавлять каждый элемент операцией v.push_back(элемент);
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
03.05.2011, 20:55 #9
Цитата Сообщение от exkilla Посмотреть сообщение
После того, как мне уже не будут нужны объекты, каким образом мне освободить занимаемую память? Просто вызвать метод clear?
Нет, вызвать delete для каждого элемента.
Цитата Сообщение от exkilla Посмотреть сообщение
Объясните пожалуйста почему.
Потому что постфиксная запись предполагает создание временного объекта.
Цитата Сообщение от exkilla Посмотреть сообщение
На сколько элементов резервируется место в данном случае?
Для тебя, как для пользователя контейнером, в нём ровно v.size() элементов )
1
exkilla
3 / 3 / 0
Регистрация: 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
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
03.05.2011, 21:17 #11
Цитата Сообщение от exkilla Посмотреть сообщение
Верно, но я имел в виду v.capacity() =) Проверил. После создания вектора равно 0.
даже это не означает что там не выделена память
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2011, 21:17
Привет! Вот еще темы с ответами:

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов - C++
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют создать нулевой вектор и вектор с...

В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты начинают двигаться - C++
В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты...

Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы - C++
Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы. Безопасный вектор определяет переменные нижний и верхний...

Есть квадратная матрица А порядка n и вектор b с n элементами. Получить вектор Аb. - C++
Привет. Не могу разобратся, вот задание: Есть квадратная матрица А порядка n и вектор b с n элементами. Получить вектор Аb.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.05.2011, 21:17
Ответ Создать тему
Опции темы

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