vector的插入和删除伴随着大量的数据拷贝(移动)
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> vData;
constexpr int SIZE = 50;
cout << "..........分配过程................" << endl;
for (int i = 0; i < SIZE; ++i)
{
vData.push_back(i);
cout << "ptr" << i << "=" << &vData[i] << endl;
}
cout << "..........分配完成...................." << endl;
for (int i = 0; i < SIZE; ++i)
{
cout << "ptr" << i << "=" << &vData[i] << endl;
}
cout << "..........删除过程..................." << endl;
for (auto it= vData.begin(); it!=vData.end(); ++it)
{
static int i = 0;
if (i < 20)
{
vData.erase(it);
}
cout << "ptr" << i << "=" << &vData[i] << endl;
++i;
}
cout << "..........删除完成..................." << endl;
for (int i = 0; i < vData.size(); ++i)
{
cout << "ptr" << i << "=" << &vData[i] << endl;
}
return 0;
}
实验结果
..........分配过程................
ptr0=011694D0
ptr1=01169414
ptr2=01164238
ptr3=011653D4
ptr4=01164240
ptr5=01164244
ptr6=011653E0
ptr7=011653E4
ptr8=011653E8
ptr9=0116541C
ptr10=01165420
ptr11=01165424
ptr12=01165428
ptr13=01164F34
ptr14=01164F38
ptr15=01164F3C
ptr16=01164F40
ptr17=01164F44
ptr18=01164F48
ptr19=0116508C
ptr20=01165090
ptr21=01165094
ptr22=01165098
ptr23=0116509C
ptr24=011650A0
ptr25=011650A4
ptr26=011650A8
ptr27=011650AC
ptr28=01165248
ptr29=0116524C
ptr30=01165250
ptr31=01165254
ptr32=01165258
ptr33=0116525C
ptr34=01165260
ptr35=01165264
ptr36=01165268
ptr37=0116526C
ptr38=01165270
ptr39=01165274
ptr40=01165278
ptr41=0116527C
ptr42=0116E600
ptr43=0116E604
ptr44=0116E608
ptr45=0116E60C
ptr46=0116E610
ptr47=0116E614
ptr48=0116E618
ptr49=0116E61C
..........分配完成....................
ptr0=0116E558
ptr1=0116E55C
ptr2=0116E560
ptr3=0116E564
ptr4=0116E568
ptr5=0116E56C
ptr6=0116E570
ptr7=0116E574
ptr8=0116E578
ptr9=0116E57C
ptr10=0116E580
ptr11=0116E584
ptr12=0116E588
ptr13=0116E58C
ptr14=0116E590
ptr15=0116E594
ptr16=0116E598
ptr17=0116E59C
ptr18=0116E5A0
ptr19=0116E5A4
ptr20=0116E5A8
ptr21=0116E5AC
ptr22=0116E5B0
ptr23=0116E5B4
ptr24=0116E5B8
ptr25=0116E5BC
ptr26=0116E5C0
ptr27=0116E5C4
ptr28=0116E5C8
ptr29=0116E5CC
ptr30=0116E5D0
ptr31=0116E5D4
ptr32=0116E5D8
ptr33=0116E5DC
ptr34=0116E5E0
ptr35=0116E5E4
ptr36=0116E5E8
ptr37=0116E5EC
ptr38=0116E5F0
ptr39=0116E5F4
ptr40=0116E5F8
ptr41=0116E5FC
ptr42=0116E600
ptr43=0116E604
ptr44=0116E608
ptr45=0116E60C
ptr46=0116E610
ptr47=0116E614
ptr48=0116E618
ptr49=0116E61C
..........删除过程...................
ptr0=0116E558
ptr1=0116E55C
ptr2=0116E560
ptr3=0116E564
ptr4=0116E568
ptr5=0116E56C
ptr6=0116E570
ptr7=0116E574
ptr8=0116E578
ptr9=0116E57C
ptr10=0116E580
ptr11=0116E584
ptr12=0116E588
ptr13=0116E58C
ptr14=0116E590
ptr15=0116E594
ptr16=0116E598
ptr17=0116E59C
ptr18=0116E5A0
ptr19=0116E5A4
ptr20=0116E5A8
ptr21=0116E5AC
ptr22=0116E5B0
ptr23=0116E5B4
ptr24=0116E5B8
ptr25=0116E5BC
ptr26=0116E5C0
ptr27=0116E5C4
ptr28=0116E5C8
ptr29=0116E5CC
..........删除完成...................
ptr0=0116E558
ptr1=0116E55C
ptr2=0116E560
ptr3=0116E564
ptr4=0116E568
ptr5=0116E56C
ptr6=0116E570
ptr7=0116E574
ptr8=0116E578
ptr9=0116E57C
ptr10=0116E580
ptr11=0116E584
ptr12=0116E588
ptr13=0116E58C
ptr14=0116E590
ptr15=0116E594
ptr16=0116E598
ptr17=0116E59C
ptr18=0116E5A0
ptr19=0116E5A4
ptr20=0116E5A8
ptr21=0116E5AC
ptr22=0116E5B0
ptr23=0116E5B4
ptr24=0116E5B8
ptr25=0116E5BC
ptr26=0116E5C0
ptr27=0116E5C4
ptr28=0116E5C8
ptr29=0116E5CC
E:\vc_test\LearMordenC\Release\LearMordenC.exe (进程 7724)已退出,返回代码为: 0。
若要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口...