powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пятничные контейнеры
7 сообщений из 32, страница 2 из 2
Пятничные контейнеры
    #39593418
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbНо вектор это кусок непрерывной памяти с указателями. Как я понимаю, этот кусок памяти можно перенести безболезненно для любого типа элементов? можно если осторожно, со SMART Po можно залететь
...
Рейтинг: 0 / 0
Пятничные контейнеры
    #39593473
YesSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMb Не, я не про элементы, я про вектор, как контейнер. Итераторы - это указатели, и они лежат в памяти один за другим. А вот сами элементы могут лежать где угодно и как угодно и быть чем угодно. Но вектор это кусок непрерывной памяти с указателями. Как я понимаю, этот кусок памяти можно перенести безболезненно для любого типа элементов?

это твой частный случай то библиотека сдесь непричём.
Код: plaintext
1.
2.
3.
4.
5.
6.
 std::vector<int> a {1,2,3,4,5,6}, b {9,10,11};
 
 size_t a_len = a.size(), b_len = b.size();
 a.resize(a_len+b_len);
 memcpy(&(a[a_len]), &(b[0]), b_len*sizeof(b[0]));
 b.clear();
...
Рейтинг: 0 / 0
Пятничные контейнеры
    #39593915
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YesSqlэто твой частный случай то библиотека сдесь непричём.посмотрел ещё раз внутрь. И ничего не понял :)
взял этот пример, встал брекпоинтом перед memcpy. Во-первых, нельзя обращаться по адресу элемента через индекс. Но это ладно. Я стал смотреть значения адресов a.begin() и b.begin() через quitview. Они оказались одинаковыми! Нет, я не глючу. При запуске quickview студия прописывала адрес итератора в одно и то же место. Это какая-то, видимо, адова оптимизация. После этого я перестал там пытаться разобраться, как и что лежит в памяти, потому что там квантовая механика уже, если ты посмотрел на итератор, то он изменил своё состояние
...
Рейтинг: 0 / 0
Пятничные контейнеры
    #39594017
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb,

да всё просто, память просто может перелоцироваться и указатель в итераторе будет указывать на освобождённую область
...
Рейтинг: 0 / 0
Пятничные контейнеры
    #39594033
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbВо-первых, нельзя обращаться по адресу элемента через индекс.это почему?
...
Рейтинг: 0 / 0
Пятничные контейнеры
    #39594047
YesSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMbВо-первых, нельзя обращаться по адресу элемента через индекс.

В твоём частном случае можно.
Код: plaintext
1.
2.
3.
4.
5.
6.
  reference
      operator[](size_type __n) _GLIBCXX_NOEXCEPT
      {
	__glibcxx_requires_subscript(__n);
	return *(this->_M_impl._M_start + __n);
      }



для этого даже ввели метод data() в c++11
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
     /**
       *   Returns a pointer such that [data(), data() + size()) is a valid
       *   range.  For a non-empty %vector, data() == &front().
       */
      _Tp*
      data() _GLIBCXX_NOEXCEPT
      { return _M_data_ptr(this->_M_impl._M_start); }



FYI
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
      void
      _M_create_storage(size_t __n)
      {
	this->_M_impl._M_start = this->_M_allocate(__n);
	this->_M_impl._M_finish = this->_M_impl._M_start;
	this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
      }
    };
...
Рейтинг: 0 / 0
Пятничные контейнеры
    #39596502
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychэто почему?ну вот по той странной ситуации, когда у меня обращение к begin() что-то меняло в памяти.
YesSqlFYIага, спасибо, посмотрю в эту сторону
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пятничные контейнеры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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