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

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

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

Студворк — интернет-сервис помощи студентам
Всем привет! Решил разобраться с векторами. Написал программку. На выводе ожидал увидеть 10 случайных числ. Но получаю краш приложения. Подскажите пожалуйста, что я делаю не так.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2011, 19:57
Ответы с готовыми решениями:

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

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

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

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

Не по теме:

Цитата Сообщение от 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  [ТС]
Спасибо. Работает.

После того, как мне уже не будут нужны объекты, каким образом мне освободить занимаемую память? Просто вызвать метод 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
Цитата Сообщение от exkilla Посмотреть сообщение
На сколько элементов резервируется место в данном случае?
Там внутри - зависит от реализации. Но для того, кто использует - элементов нет. Нужно добавлять каждый элемент операцией v.push_back(элемент);
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
03.05.2011, 20:55
Цитата Сообщение от exkilla Посмотреть сообщение
После того, как мне уже не будут нужны объекты, каким образом мне освободить занимаемую память? Просто вызвать метод clear?
Нет, вызвать delete для каждого элемента.
Цитата Сообщение от exkilla Посмотреть сообщение
Объясните пожалуйста почему.
Потому что постфиксная запись предполагает создание временного объекта.
Цитата Сообщение от exkilla Посмотреть сообщение
На сколько элементов резервируется место в данном случае?
Для тебя, как для пользователя контейнером, в нём ровно v.size() элементов )
1
3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73
03.05.2011, 21:12  [ТС]
Цитата Сообщение от rangerx Посмотреть сообщение
Нет, вызвать delete для каждого элемента.
Верно?
Code
1
2
    for(vector<Xray*>::iterator it = v.begin(); it!=v.end(); ++it)
        delete (*it);
Цитата Сообщение от rangerx Посмотреть сообщение
Потому что постфиксная запись предполагает создание временного объекта.
Спасибо.
Цитата Сообщение от rangerx Посмотреть сообщение
Для тебя, как для пользователя контейнером, в нём ровно v.size() элементов )
Верно, но я имел в виду v.capacity() =) Проверил. После создания вектора равно 0.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
03.05.2011, 21:17
Цитата Сообщение от exkilla Посмотреть сообщение
Верно, но я имел в виду v.capacity() =) Проверил. После создания вектора равно 0.
даже это не означает что там не выделена память
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.05.2011, 21:17
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru