[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]
前回と同様の検証をinsert関数で実施しました。
insertやeraseのようなイテレータが戻り値の関数では、これを受け取ればイテレータを再設定せずに済む場合があります。
先頭に挿入した場合だけ再設定不要で、それ以外の場合は再設定しないと全てのメモリアドレスを確認できません。
#include <iostream>
#include <vector>
using std::to_string;
int main()
{
std::vector<int> vec{ 1, 2, 3, 4, 5};
std::vector<int>::iterator itr = vec.begin();
// vectorの各要素のアドレスを出力
std::cout << "vector" << std::endl;
while (itr != vec.end())
{
std::cout << &(*itr) << std::endl;
itr++;
}
// 要素を挿入
itr = vec.insert(vec.begin(),6);
// 再度アドレス出力
std::cout << "vector挿入後" << std::endl;
while (itr != vec.end())
{
std::cout << &(*itr) << std::endl;
itr++;
}
for (int num:vec)
{
std::cout << to_string(num) << std::endl;
}
}
--------------------------------------------------
出力例
--------------------------------------------------
vector
0x1336068c0
0x1336068c4
0x1336068c8
0x1336068cc
0x1336068d0
vector挿入後
0x1336068e0
0x1336068e4
0x1336068e8
0x1336068ec
0x1336068f0
0x1336068f4
6
1
2
3
4
5