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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.03.2016, 16:05   #41
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

вот нашел. разве бы это работало в списке ?

в векторе выделяется четко скоординированный обьем памяти

к примеру 1-й элемент имеет адрес 0x01
2-й 0x02
и т.д.

в списке нету такой упорядоченности. вернее она не обязательна.

Код:
// vector::data
#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector (5);

  int* p = myvector.data();

  *p = 10;
  ++p;
  *p = 20;
  p[2] = 100;

  std::cout << "myvector contains:";
  for (unsigned i=0; i<myvector.size(); ++i)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';

  return 0;
}
RAFA91 вне форума
Старый 03.03.2016, 16:38   #42
ProBeginner
Форумчанин
 
Регистрация: 22.02.2016
Сообщений: 145
По умолчанию Работа с указателями и итераторами С/С++

Если б создали в программе список до операций освобождения памяти, то элементы разместились бы последовательно как в массиве. Из-за этого возможна ситуация, когда работа с указателем на элемент списка методами пригодными для указателя на элемент массива (инкремент и сложение с целым) не будет приводить к ошибке времени исполнения.

Если бы делался список в С, то к указателю можно было бы применить оператор инкремента для прохода по списку. Ошибки не было бы, ну разве что руки отломают за такое. Хотя зачет студенту за программу не светит точно.

Для итераторов в С++, я так думаю, арифметические операторы тривиальны для массивов и перегружены более сложными функциями для списков.

Есть правило: изменили контейнер - итераторы недействительны. Проще соблюдать это правило, чем думать, изменится что-то или нет. Да и потребности такой нет.
Возьму в кредит мильён по 100% годовых на сто лет.

Последний раз редактировалось ProBeginner; 04.03.2016 в 13:38.
ProBeginner вне форума
Старый 03.03.2016, 16:57   #43
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от ProBeginner Посмотреть сообщение
Если б создали в программе список до операций освобождения памяти, то элементы разместились бы последовательно как в массиве. .
в начальный момент создания списка да.
но потом все последующие операции могут привести к нарушению
последовательности как в массиве.
это в списке допускается.
там простые указатели применять нельзя как выше в примере с вектором.
в векторе всегда соблюдается последовательность.
а для соблюдения этой последовательности нужно делать обновление вектора. вот по этому вектор такой медленный.
Цитата:
Сообщение от ProBeginner Посмотреть сообщение
Е

Есть правило: изменили контейнер - итераторы недействительны. .
нужно смотреть что возвращает метод который способствовал этому изменению .

самое простое это кинуть итератор в начало.

Последний раз редактировалось RAFA91; 03.03.2016 в 17:00.
RAFA91 вне форума
Старый 03.03.2016, 17:20   #44
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
вот нашел. разве бы это работало в списке ?
вектор и список разные контейнеры, АУ!

Цитата:
нужно смотреть что возвращает метод который способствовал этому изменению .
а может нужно делать правильно, а не как пятка приказала?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 03.03.2016, 17:38   #45
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

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

а может нужно делать правильно, а не как пятка приказала?
это как ?
RAFA91 вне форума
Старый 04.03.2016, 13:21   #46
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

список намного лучше вектора. в нем итератор адекватный.

один минус - это не имеет произвольного доступа как в векторе.
RAFA91 вне форума
Старый 04.03.2016, 13:48   #47
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

список просто не вектор.
у них разные принципы.
итератор и там и там адекватный.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 04.03.2016, 14:14   #48
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
список просто не вектор.
.
это логично из названия.

для списка нужно брать advence()

итератор списка построен совсем иначе.

там только ++ и --

+= уже шыш.

______________________

зачем нужен файл
Код:
#include <iterator>
?

каждый контейнер имеет в своем составе итератор же

Последний раз редактировалось RAFA91; 04.03.2016 в 14:22.
RAFA91 вне форума
Старый 04.03.2016, 14:48   #49
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
зачем нужен файл
а посмотреть не судьба?
Цитата:
каждый контейнер имеет в своем составе итератор же
Ну и что из этого?
Croessmah вне форума
Старый 04.03.2016, 14:51   #50
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
а посмотреть не судьба?

Ну и что из этого?
нету нужды в
Код:
#include <iterator>
потому что в контейнере оно есть.
RAFA91 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Итератор для двусвязного списка Black_Dynamite Помощь студентам 0 07.11.2013 22:04
итератор set c++ Arrioh Помощь студентам 1 25.12.2012 16:01
Итератор списка по значению Link0 Общие вопросы по Java, Java SE, Kotlin 0 21.11.2010 14:02