powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / STL
7 сообщений из 7, страница 1 из 1
STL
    #33132335
Cергей1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Столкнулся с такой проблемой ( раньше с STL не работал)
Как по итератору для vector-а, который вроде бы сам указатель, получить реальный адрес элемента?
Заранее спасибо.
...
Рейтинг: 0 / 0
STL
    #33132439
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cергей1111 wrote:
> Здравствуйте.
> Столкнулся с такой проблемой ( раньше с STL не работал)
> Как по итератору для vector-а, который вроде бы сам указатель, получить
> реальный адрес элемента?
> Заранее спасибо.
vector чего?
короче, код давай
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
STL
    #33132534
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cергей1111Здравствуйте.
Столкнулся с такой проблемой ( раньше с STL не работал)
Как по итератору для vector-а, который вроде бы сам указатель, получить реальный адрес элемента?
Заранее спасибо.

Итератор - это класс. Если залезть в <vector>, то можно обнаружить примерно такой код:

Код: plaintext
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
		// CLASS iterator
	class iterator : public const_iterator {
	public:
		iterator()
			: const_iterator() {}
		iterator(size_t _O, _Vbase *_P)
			: const_iterator(_O, _P) {}
		reference operator*() const
			{return (reference(_Off, _Ptr)); }
		iterator& operator++()
			{_Inc();
			return (*this); }
		iterator operator++(int)
			{iterator _Tmp = *this;
			_Inc();
			return (_Tmp); }
		iterator& operator--()
			{_Dec();
			return (*this); }
		iterator operator--(int)
			{iterator _Tmp = *this;
			_Dec();
			return (_Tmp); }
		iterator& operator+=(difference_type _N)
			{_Off += _N;
			_Ptr += _Off / _VBITS;
			_Off %= _VBITS;
			return (*this); }
		iterator& operator-=(difference_type _N)
			{return (*this += -_N); }
		iterator operator+(difference_type _N) const
			{iterator _Tmp = *this;
			return (_Tmp += _N); }
		iterator operator-(difference_type _N) const
			{iterator _Tmp = *this;
			return (_Tmp -= _N); }
		difference_type operator-(const iterator _X) const
			{return (_VBITS * (_Ptr - _X._Ptr)
				+ (difference_type)_Off
				- (difference_type)_X._Off); }
		reference operator[](difference_type _N) const
			{return (*(*this + _N)); }
		bool operator==(const iterator& _X) const
			{return (_Ptr == _X._Ptr && _Off == _X._Off); }
		bool operator!=(const iterator& _X) const
			{return (!(*this == _X)); }
		bool operator<(const iterator& _X) const
			{return (_Ptr < _X._Ptr
				|| _Ptr == _X._Ptr && _Off < _X._Off); }
		bool operator>(const iterator& _X) const
			{return (_X < *this); }
		bool operator<=(const iterator& _X) const
			{return (!(_X < *this)); }
		bool operator>=(const iterator& _X) const
			{return (!(*this < _X)); }
		};

Ссылку (не адрес!) на объект возвращают два оператора
Код: plaintext
[]
и
Код: plaintext
*
.
...
Рейтинг: 0 / 0
STL
    #33132770
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cергей1111Здравствуйте.
Столкнулся с такой проблемой ( раньше с STL не работал)
Как по итератору для vector-а, который вроде бы сам указатель, получить реальный адрес элемента?
Заранее спасибо.

Код: plaintext
1.
2.
std::vector<T>::iterator i = v.begin();
T* p = &(*i);
...
Рейтинг: 0 / 0
STL
    #33133249
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cергей1111Здравствуйте.
Как по итератору для vector-а, который вроде бы сам указатель, получить реальный адрес элемента?


Итератор - не указатель !! Он может быть реализован как указатель в самом примитивном случае, но вообще он к указателям не имеет никагого отношения.
Для того, чтобы из итератора получить указатель на объект, на который указывает итератор, нужно разименовать итератор и взять от него адрес.

Код: plaintext
1.
2.
3.
4.
5.
std::vector<AClass> aVector;
...
std::vector<AClass>::iterator p = aVector.begin();

AClass *pAClass = &(*p);
...
Рейтинг: 0 / 0
STL
    #33134479
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Итератор - не указатель !!

Смотрим ещё раз мой код и находим отличия от Вашего :)
...
Рейтинг: 0 / 0
STL
    #33134556
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитал. Но не понял, зачем Сергею это нужно.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / STL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]