Ссылки Persistant в Контейнерах STL

если Вы получаете ошибку в окне Add References, попытайтесь редактировать .csproj для добавления ссылки (наряду с другими ссылками) в Ссылке ItemGroup как:

  <ItemGroup>
    <Reference Include="System.Configuration" />
  </ItemGroup>
6
задан Akusete 7 September 2009 в 06:43
поделиться

4 ответа

О вставке в векторы стандарт говорит в 23.2.4.3/1:

[ insert () ] вызывает перераспределение, если новый размер больше старого вместимость. Если перераспределения не происходит, все итераторы и ссылки до того, как точка вставки останется

(Хотя на самом деле здесь говорится о insert () , таблица 68 показывает, что a.push_back (x) должен быть эквивалентен a.insert ( a.end (), x) для любого вектора a и значения x .) Это означает, что если вы зарезервируете () заранее достаточно памяти, тогда (и только тогда) итераторы и ссылки гарантированно не станут недействительными, если вы insert () или push_back () больше элементов.

Что касается удаления элементов, 23.2.4.3/ 3 говорит:

[ erase () ] отменяет все итераторы и ссылки после точка стирания.

Согласно Таблице 68 и Таблице 67 соответственно, pop_back () и clear () эквивалентны соответствующим вызовам erase () .

12
ответ дан 8 December 2019 в 05:56
поделиться

Некоторые основные правила для вектора:

  • Перераспределение делает недействительными все ссылки, указатели и итераторы для элементов вектора.
  • Вставки могут сделать ссылки недействительными, указатели и итераторы.
  • Вставка или удаление элементов делает недействительными ссылки, указатели и итераторы, относящиеся к следующим элементы.
  • Если вставка вызывает перераспределение, он делает недействительными все ссылки, итераторы и указатели.
8
ответ дан 8 December 2019 в 05:56
поделиться

Я ожидаю, что ссылки будут признаны недействительными только при явном или неявном resize () (см. Также max_size , capacity ] и резервные методы).

1
ответ дан 8 December 2019 в 05:56
поделиться

Вектор аннулирует свой итератор и ссылки при перераспределении, что зависит от его текущей емкости. Хотя приведенный выше код может работать в некоторых случаях, вам не следует полагаться на него, поскольку ссылка может стать недействительной после вызова push_back (4).

1
ответ дан 8 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: