stl::list
От: Pavel515  
Дата: 14.10.13 10:04
Оценка: -1
Доброго времени суток!


Есть ли возможность в stl::list доступиться к i-тому итератору



std::list<int> A;
...
int a = A[i];
...
std::list<int>::const_iterator i = A ????


С уважением, Павел.
Если хочешь выиграть в лотерею, то купи, хотя-бы лотерейный билет. (В.Мэгре)
Re: stl::list
От: Lorenzo_LAMAS  
Дата: 14.10.13 10:07
Оценка:
P>
P>std::list<int> A;
P>...
P>int a = A[i];
P>...
P>std::list<int>::const_iterator i = A ????
P>


P>С уважением, Павел.


ну либо сам делай инкремент нужное число раз, либо используй std::advance. вообще список — контейнер не подходящий для такого доступа.
и список не имеет оператора [].
Of course, the code must be complete enough to compile and link.
Re[2]: stl::list
От: Pavel515  
Дата: 14.10.13 10:18
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

P>>
P>>std::list<int> A;
P>>...
P>>int a = A[i];
P>>...
P>>std::list<int>::const_iterator i = A ????
P>>


P>>С уважением, Павел.


L_L>ну либо сам делай инкремент нужное число раз, либо используй std::advance. вообще список — контейнер не подходящий для такого доступа.

L_L>и список не имеет оператора [].


Да, понял, я поспешил!


а для deque такое возможно?
Если хочешь выиграть в лотерею, то купи, хотя-бы лотерейный билет. (В.Мэгре)
Re[3]: stl::list
От: Lorenzo_LAMAS  
Дата: 14.10.13 10:20
Оценка:
P>Да, понял, я поспешил!


P>а для deque такое возможно?


возможно и для дек. но опять же, вряд ли разумно использовать advance. для дек есть оператор [].
Of course, the code must be complete enough to compile and link.
Re: stl::list
От: Molchalnik  
Дата: 14.10.13 10:30
Оценка:
Здравствуйте, Pavel515, Вы писали:

P>Доброго времени суток!



P>Есть ли возможность в stl::list доступиться к i-тому итератору


Не нравится, что есть — наследуйся и задавай operator[] как тебе нравится
Re[4]: stl::list
От: Pavel515  
Дата: 14.10.13 10:34
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

P>>Да, понял, я поспешил!



P>>а для deque такое возможно?


L_L>возможно и для дек. но опять же, вряд ли разумно использовать advance. для дек есть оператор [].


оператор [] возвращает const_reference, а нужен именно const_iterator и advance в общем-то выход, если не создавать новый класс или шаблон
Если хочешь выиграть в лотерею, то купи, хотя-бы лотерейный билет. (В.Мэгре)
Re[5]: stl::list
От: Lorenzo_LAMAS  
Дата: 14.10.13 10:40
Оценка:
Здравствуйте, Pavel515, Вы писали:

P>Здравствуйте, Lorenzo_LAMAS, Вы писали:


P>>>Да, понял, я поспешил!



P>>>а для deque такое возможно?


L_L>>возможно и для дек. но опять же, вряд ли разумно использовать advance. для дек есть оператор [].


P>оператор [] возвращает const_reference, а нужен именно const_iterator и advance в общем-то выход, если не создавать новый класс или шаблон


вообще я погорячился — для дек итератора адванс — самое оно, так как там не будет кучи инкрементов а будет + (+=).
можешь вместо адванса сам использовать оператор +=
Of course, the code must be complete enough to compile and link.
Re[6]: stl::list
От: Pavel515  
Дата: 14.10.13 10:54
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Здравствуйте, Pavel515, Вы писали:


P>>Здравствуйте, Lorenzo_LAMAS, Вы писали:


P>>>>Да, понял, я поспешил!



P>>>>а для deque такое возможно?


L_L>>>возможно и для дек. но опять же, вряд ли разумно использовать advance. для дек есть оператор [].


P>>оператор [] возвращает const_reference, а нужен именно const_iterator и advance в общем-то выход, если не создавать новый класс или шаблон


L_L>вообще я погорячился — для дек итератора адванс — самое оно, так как там не будет кучи инкрементов а будет + (+=).

L_L>можешь вместо адванса сам использовать оператор +=


Спасибо!
Если хочешь выиграть в лотерею, то купи, хотя-бы лотерейный билет. (В.Мэгре)
Re: stl::list
От: opener  
Дата: 14.10.13 11:03
Оценка:
Здравствуйте, Pavel515, Вы писали:

P>Доброго времени суток!



P>Есть ли возможность в stl::list доступиться к i-тому итератору




P>
P>std::list<int> A;
P>...
P>int a = A[i];
P>...
P>std::list<int>::const_iterator i = A ????
P>


P>С уважением, Павел.


Я для подобных целей использую класс-обертку, содержащий составной контейнер из связки vector+list или map+list
Доступ к элементам листа осуществляется по индексу или ключу, содержащимися в vector'e или map'e
Re[2]: stl::list
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 14.10.13 11:26
Оценка:
Здравствуйте, Molchalnik, Вы писали:

M>Не нравится, что есть — наследуйся и задавай operator[] как тебе нравится

От него контейнеров нельзя наследоваться.
Sic luceat lux!
Re: stl::list
От: Abyx Россия  
Дата: 14.10.13 11:26
Оценка:
Здравствуйте, Pavel515, Вы писали:

P>Есть ли возможность в stl::list доступиться к i-тому итератору


все возможности stl::list описаны в Стандарте.
In Zen We Trust
Re[3]: stl::list
От: Lorenzo_LAMAS  
Дата: 14.10.13 11:29
Оценка:
Здравствуйте, Kernan, Вы писали:

K>Здравствуйте, Molchalnik, Вы писали:


M>>Не нравится, что есть — наследуйся и задавай operator[] как тебе нравится

K>От него контейнеров нельзя наследоваться.

можно вполне, если знаешь/понимаешь, что делаешь
Of course, the code must be complete enough to compile and link.
Re[3]: stl::list
От: Evgeny.Panasyuk Россия  
Дата: 14.10.13 12:23
Оценка:
Здравствуйте, Kernan, Вы писали:

M>>Не нравится, что есть — наследуйся и задавай operator[] как тебе нравится

K>От него контейнеров нельзя наследоваться.

Можно. И такие примеры даже Страуструп в своих книжках показывал.
Другое дело что в этом конкретном случае наследование скорей всего не нужно, как и std::list.
Re: stl::list
От: Pavel515  
Дата: 14.10.13 12:41
Оценка:
Спасибо всем кто откликнулся!

решение всегда почти рядом!

применил std::dequе и потом +=

Еще раз списобо!
Если хочешь выиграть в лотерею, то купи, хотя-бы лотерейный билет. (В.Мэгре)
Re[3]: stl::list
От: Molchalnik  
Дата: 14.10.13 17:25
Оценка: +1
Здравствуйте, Kernan, Вы писали:

K>Здравствуйте, Molchalnik, Вы писали:


M>>Не нравится, что есть — наследуйся и задавай operator[] как тебе нравится

K>От него контейнеров нельзя наследоваться.

Имхо, нельзя использовать материал без анализа. Кто-то когда-то написал, что нельзя наследовать контейнеры stl, и толпы леммингов от программирования побежали жечь на костре всех, кто делает иначе.

Я не согласен с фразой "От контейнеров stl нельзя наследовать класс". Если бы даже я ляпнул что-то такое, то я бы сформулировал это иначе: "В общем случае наследование от невиртуальной имплементации (например, контейнера stl) дурная практика". При этом вроде бы как мы говорим одно и тоже, но я прав, а ты — нет.

Почему? Потому что конечная цель кодера (а не быдлолемминга) — быстрый конечный результат без проблем в будущем. Один перегруженный оператор — это оно. Это быстрый конечный результат без проблем в будущем. В голове должна быть чёткая целевая функция.

Если тебе нужно перегрузить квадратные скобки у list, и ты не планируешь развивать свой класс дальше, то — вперёд. Но если вдруг входе развития ты добавишь к этому классу ещё пару перегруженных функций, то вместо добавления третьей-четвёртой перегруженной функции лучше отрефакторить твоё чудо в сторону обёртки над list.

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


Иногда до смешного грустно наблюдать, как разумные идеи в руках некоторых коллег превращаются в религиозные догмы, применяемые без рассуждения и с последующими сожжениями еретиков.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.