Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2015, 13:33   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию vector

На сколько я знаю vector хранит свои обьекты в динамике.

Так почему-же сам обьект типа vector хранится в стеке ?

Код:
#include <vector>
#include <iostream>
#include <conio.h>


using namespace std;

int main()

{
	vector <int> EmptyClass;

	printf("\n++++++++ EmptyClass = %p\n",&EmptyClass);
	
	getch();

	return 0;
}
RAFA91 вне форума Ответить с цитированием
Старый 30.07.2015, 13:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Потому что он описан у тебя как локальный.
Опиши его глобально (переменку) - будет храниться в сегменте данных.
Причем тут нужно еще убедиться что именно объект, а не указатель на него хранится в стеке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.07.2015, 14:33   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Потому что он описан у тебя как локальный.
.
а если так ?

Код:
vector <int> *p = new vector <int>;

vector <int> &EmptyClass = *p;
RAFA91 вне форума Ответить с цитированием
Старый 30.07.2015, 14:39   #4
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
а если так ?

Код:
vector <int> *p = new vector <int>;

vector <int> &EmptyClass = *p;
Господи чё за хер?

Код:
vector<int>* iVec;
это указатель, который храниться в стеке, весит 4-8 байт.
Код:
vector<int> iVec;
это обычный объект, который храниться в стеке, весит весь объект.

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

Второй записью, Вы разоминовываете указатель и приравниваете ссылке... это всё равно что указатель приравнять к указателю.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 30.07.2015, 14:58   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а если так ?
А зачем? Какая разница в стеке он или в куче? Тебе стека не хватает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.07.2015, 16:18   #6
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А зачем? Какая разница в стеке он или в куче? Тебе стека не хватает?
это великолепный вопрос

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
Господи чё за хер?

.
хер не хер , но к функции обращаться через ссылку намного елегантнее

чем через указатель.

разве методы вектора поддерживают обращение к ним через указатель

->

Последний раз редактировалось Stilet; 30.07.2015 в 16:21.
RAFA91 вне форума Ответить с цитированием
Старый 30.07.2015, 16:21   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Было бы неплохо услышать великолепный ответ )
Цитата:
разве методы вектора поддерживают обращение к ним через указатель
Код:
	vector<int> *v = new vector<int>();
	v->push_back(1);v->push_back(2);
	for(vector<int>::iterator i=v->begin();i!=v->end();i++) printf("%d\t",*i);
	delete v;
Не?
I'm learning to live...

Последний раз редактировалось Stilet; 30.07.2015 в 16:27.
Stilet вне форума Ответить с цитированием
Старый 30.07.2015, 16:23   #8
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

вектор сам по себе хранит обьекты в динамике , так , а что тогда

идет в стек ?

если только размер контейнера то фиг с ним.

__________________________

только что узнал что глобалки хранятся в куче.
RAFA91 вне форума Ответить с цитированием
Старый 30.07.2015, 16:51   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что тогда

идет в стек ?
Указатель на объект вектора, если ты его не в куче размещаешь. ИМХО.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.07.2015, 17:02   #10
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Указатель на объект вектора, если ты его не в куче размещаешь. ИМХО.
а сам указатель небось указывает на область в куче , где собственно

и лежит обьект ?
RAFA91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
vector c++ Alendorff Помощь студентам 3 14.04.2013 14:52
C++ Boost - vector<path> to vector<string> frommars Общие вопросы C/C++ 0 04.02.2013 21:19
<vector> dcPEOP Общие вопросы C/C++ 2 26.01.2012 11:28
#include <vector> GBAXA Visual C++ 12 15.08.2010 11:25
vector NiCola999 Помощь студентам 5 26.02.2010 08:37