vector 是向量数组,一端开口的数组,其内存结构图如下所示
可见其在尾部插入数据速度很快,而在其他地方插入数据将会很慢 void testVector()
{
char buf[10] = { 0 };
vector<string> test_vec;
clock_t timeStart = clock();
for(long i = 0; i < RAN_MAX;i++)
{
try{
snprintf(buf,10,"%d",rand());
test_vec.push_back(string(buf));
}
catch(exception& p)
{
cout<<"i = " << i << p.what()<< endl;
abort();
}
}
cout << "milli-seconds : " << (clock() - timeStart)<<endl;
cout << "vector.size() = " << test_vec.size() <<endl;
cout << "vector.front() = " << test_vec.front() << endl;
cout << "vector.back() = " <<test_vec.back() <<endl;
cout << "vector.data() = " <<test_vec.data() << endl;
cout << "vector.capactity() = "<< test_vec.capacity() << endl;
int insertTimeBegein = clock();
test_vec.insert(test_vec.begin(),100,"test");
cout << "insert time = " << (clock() - insertTimeBegein)<< endl;
cout << "insert string = " << test_vec.at(0);
}
int main()
{
testVector();
return 0;
}
输出结果如下
milli-seconds : 3522 //循环遍历1000000次消耗时间
vector.size() = 1000000 //当前vector数据大小
vector.front() = 41 //第一个元素值
vector.back() = 12679 //最后一个元素值
vector.data() = 0x4b5f020 //vector首地址
vector.capactity() = 1048576 //当前vector的容量
insert time = 18 //在第一个元素插入数值耗时
insert string = test
由于vector的增长方式是2倍增长,所以vector.capactity()有的时候会比vector.size() 大很多,而在头部插入数据后由于所有数据都要往后移,并且调用string的析构与构造函数,所以耗时比较长