Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / STL / 7 сообщений из 7, страница 1 из 1
23.06.2005, 23:05
    #33132335
Cергей1111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
STL
Здравствуйте.
Столкнулся с такой проблемой ( раньше с STL не работал)
Как по итератору для vector-а, который вроде бы сам указатель, получить реальный адрес элемента?
Заранее спасибо.
...
Рейтинг: 0 / 0
24.06.2005, 05:23
    #33132439
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
STL
Cергей1111 wrote:
> Здравствуйте.
> Столкнулся с такой проблемой ( раньше с STL не работал)
> Как по итератору для vector-а, который вроде бы сам указатель, получить
> реальный адрес элемента?
> Заранее спасибо.
vector чего?
короче, код давай
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
24.06.2005, 08:47
    #33132534
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
STL
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
24.06.2005, 10:41
    #33132770
Интегратор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
STL
Cергей1111Здравствуйте.
Столкнулся с такой проблемой ( раньше с STL не работал)
Как по итератору для vector-а, который вроде бы сам указатель, получить реальный адрес элемента?
Заранее спасибо.

Код: plaintext
1.
2.
std::vector<T>::iterator i = v.begin();
T* p = &(*i);
...
Рейтинг: 0 / 0
24.06.2005, 13:00
    #33133249
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
STL
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
25.06.2005, 01:05
    #33134479
Интегратор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
STL
MasterZiv
Итератор - не указатель !!

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


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