Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, vgrigor, Вы писали:
V>>Наследуй, и переопределяй, как обычно для классов. WH>Наследоваться от чего? От std::vector?
Здравствуйте, vgrigor, Вы писали:
V>т.е. побитового копирования,
Что такое побитовое копирование? В С++ нет такого понятия.
Есть конструктор копирования и копирующие присваивание. И то и другое может содержать кучу дополнительных действий.
В данном случае ни какого копирования не происходит. Мало того что оно не нужно дык оно еще и испортит синематику итераторов. V>или просто .= не происходит ??
А это что за оператор? Из какого языка? В С++ есть = но не .=
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, vgrigor, Вы писали:
V>>У нас речь шла об этом, почитай тему. WH> Тебе сказали что оператор * итератора возвращает ссылку на объект, а не сам является ссылкой.
Если я определяю вектор STL, по значению а не указателю,
вот так:
typedef vector<CVariableShift> type_DevStrVector;
struct CVariableShift
{
int i;
};
то если у меня есть итератор на элемент какой-то,
то как из него взять значение переменной ?
т.е.
получается только так:
через преобразование в указатель:
int j = it->i; // Работает удобно, но для внутренних членов только, а надо саму копию структуры
l_VariableShift = *(CVariableShift*)(&it); //неудобно, ненормально
//а не как обычно в map:
//l_VariableShift = it->second;
Здравствуйте, vgrigor, Вы писали:
V>У вектора итератор все равно указатель.
1)Не факт.
2)Для других итераторов также можно получить значение. Вернее ссылку.
ЗЫ STL итераторы спроектированы так чтобы максимально походить на указатели.
ЗЗЫ Везде где нужны итераторы можно использовать указатели но не везде где нужны указатели можно использовать итераторы.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, vgrigor, Вы писали:
V>>У вектора итератор все равно указатель. WH>1)Не факт. WH>2)Для других итераторов также можно получить значение. Вернее ссылку.
WH>ЗЫ STL итераторы спроектированы так чтобы максимально походить на указатели. WH>ЗЗЫ Везде где нужны итераторы можно использовать указатели но не везде где нужны указатели можно использовать итераторы.
Здравствуйте, vgrigor, Вы писали:
V>Здравствуйте, WolfHound, Вы писали:
WH>>Здравствуйте, vgrigor, Вы писали:
V>>>У вектора итератор все равно указатель. WH>>1)Не факт. WH>>2)Для других итераторов также можно получить значение. Вернее ссылку.
WH>>ЗЫ STL итераторы спроектированы так чтобы максимально походить на указатели. WH>>ЗЗЫ Везде где нужны итераторы можно использовать указатели но не везде где нужны указатели можно использовать итераторы.
V>Спасибо,
V>Пример приведите, где итератор — ссылка?
имеется в виду, что выражение *iterator есть ссылка на объект, на который сейчас указывает iterator.
v>> У вектора итератор все равно указатель.
ПК>Не обязательно. В данном случае это, вообще, не существенно: если итератор ПК>реализован классом, у него должна быть перегружена операция *.
Интересно,
А у STL вектора он как реализован ?
Чего у него за оператор *?
А почему не просто указатель на тип по шаблону?
У нас же шаблоны по поределенному типу,
или смысл есть какой-то в дополнительном приведении типов
при этой операции?
V>А почему не просто указатель на тип по шаблону? V>У нас же шаблоны по поределенному типу, V>или смысл есть какой-то в дополнительном приведении типов V>при этой операции?
Когда я изучал экзамены Мелкософта, 70-015,
то я удивлялся совершенно четкой роли и большой роли догадливоти,
в ответа на экзаменационные вопросы.
т.е. человек должен определить, что субекьтивно лучше
из правильных вариантов,
и не тот правильный вариант, прямо признается ошибкой.
Здравствуйте, vgrigor, Вы писали:
V>А у STL вектора он как реализован ? V>Чего у него за оператор *?
Например в STL Port (в дебуг версии) итераторы проверяют выход за границу массива. V>А почему не просто указатель на тип по шаблону?
В релизе как правило (для std::vector) так и есть.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, vgrigor, Вы писали:
V>>А у STL вектора он как реализован ? V>>Чего у него за оператор *? WH>Например в STL Port (в дебуг версии) итераторы проверяют выход за границу массива. V>>А почему не просто указатель на тип по шаблону? WH>В релизе как правило (для std::vector) так и есть.
Если итератор это готовый результат, то зачем ему смотреть не вышел ли он еще за пределы?
std::vector<int> a;//пустой вектор
std::vector<int>::iterator i =a.begin();//плохо
++i; //кто, как не итератор, должен будет проверить валидность такого? как это сделает
//вектор?
Of course, the code must be complete enough to compile and link.
L_L>std::vector<int> a;//пустой вектор
L_L>std::vector<int>::iterator i =a.begin();//плохо
L_L>++i; //кто, как не итератор, должен будет проверить валидность такого? как это сделает
L_L>//вектор?
L_L>
Здравствуйте, vgrigor, Вы писали:
V>А почему плохо?
Ну хотябы по тому что там нет ни чего. Вернее еще хуже. Есть но что-то сомвсем другое и его можно испортить.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, vgrigor, Вы писали:
V>>А почему плохо? WH> Ну хотябы по тому что там нет ни чего. Вернее еще хуже. Есть но что-то сомвсем другое и его можно испортить.
Там есть vector.end(),
который отлично проверяется пользователем всегда,
как его логика, а не внутреняя.
может ему надо было указатель на начало ?
Здравствуйте, vgrigor, Вы писали:
V>Там есть vector.end(), V>который отлично проверяется пользователем всегда,
В том то и дело что не всегда... Есть такие пользователи...
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, vgrigor, Вы писали:
V>>Тогда "ты сам" и должен переопределять итератор, для проверок таких. WH>Как?
Наследуй, и переопределяй, как обычно для классов.
Здравствуйте, vgrigor, Вы писали:
V>У нас речь шла об этом, почитай тему.
Тебе сказали что оператор * итератора возвращает ссылку на объект, а не сам является ссылкой.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, vgrigor, Вы писали:
V>Ясный день. V>И от std::vector::iterator.
И что ты мне предлагаешь для отладки весть std::vector переписать? И получить все тотже итератор отличный от указателя. К стати как та собираешься наследоваться от указателя? Ну в быню. Я лучше STL Port возьму.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, vgrigor, Вы писали:
V>>Ясный день. V>>И от std::vector::iterator. WH>И что ты мне предлагаешь для отладки весть std::vector переписать? И получить все тотже итератор отличный от указателя. К стати как та собираешься наследоваться от указателя? Ну в быню. Я лучше STL Port возьму.
Sure,
а если хочешь переопределенный укзатель-итератор , то писали про оператор *.