3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73
|
|
1 | |
Вектор с указателями на объекты03.05.2011, 19:57. Показов 23122. Ответов 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
|
03.05.2011, 19:57 | |
Ответы с готовыми решениями:
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 строку на:
1
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
03.05.2011, 20:11 | 4 |
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
|
1
|
3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73
|
|
03.05.2011, 20:28 [ТС] | 7 |
Спасибо. Работает.
После того, как мне уже не будут нужны объекты, каким образом мне освободить занимаемую память? Просто вызвать метод clear? Объясните пожалуйста почему. На сколько элементов резервируется место в данном случае?
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
03.05.2011, 20:30 | 8 |
Там внутри - зависит от реализации. Но для того, кто использует - элементов нет. Нужно добавлять каждый элемент операцией v.push_back(элемент);
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
03.05.2011, 20:55 | 9 |
Нет, вызвать delete для каждого элемента.
Потому что постфиксная запись предполагает создание временного объекта. Для тебя, как для пользователя контейнером, в нём ровно v.size() элементов )
1
|
3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73
|
|
03.05.2011, 21:12 [ТС] | 10 |
Верно?
Код
for(vector<Xray*>::iterator it = v.begin(); it!=v.end(); ++it) delete (*it); Верно, но я имел в виду v.capacity() =) Проверил. После создания вектора равно 0.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
03.05.2011, 21:17 | 11 |
0
|
03.05.2011, 21:17 | |
03.05.2011, 21:17 | |
Помогаю со студенческими работами здесь
11
Вектор указателей на объекты класса Вектор, содержащий объекты класса Можно ли помещать в вектор разные объекты? Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |