使用vector需要注意的地方
1.vector支持随机存取,因此你只要知道元素的位置,可以在常数时间内存取任何一个元素;
2.在末端附加或删除元素,vector的性能相当好,但是在前端或中部安插或删除元素,性能就不行了,因为操作点之后的每一个元素都必须向后移动,而每一次移动都得调用assignment(赋值)操作符;
3.合适的vector大小(size)很重要,因为capacity()返回的实际容纳的元素数量过小,vector就必须重新配置内存存储器,
(1)一旦内存重新配置,和vector元素相关的所有references,pointers,iterators都会失效;
(2)内存重新配置很耗时间;
4.发生以下情况vector迭代器失效:
(1)使用者在一个较小索引位置上安插或移除元素
(2)由于容量变化而引起重新分配
具体讲:
安插和移除元素,都会使“作用点”之后的各元素的references,pointers,iterators失效,如果安插操作甚至引发内存重新分配,那么该容器身上的所有元素references,pointers,iterators都会失效;
5.vector只支持最低限度的逻辑错误检查。下标操作符的安全版本at(),是唯一被标准规格书要求可能抛出异常的一个函数,其他函数都不做检查,如果发生越界存取,会引发未定义的行为;
代码示例:
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
vector<string> sentence;
sentence.reserve(5);
sentence.push_back("Hello,");
sentence.push_back("how");
sentence.push_back("are");
sentence.push_back("you");
sentence.push_back("?");
copy(sentence.begin(),sentence.end(),ostream_iterator<string>(cout," "));
cout<<endl;
cout<<"max_size():"<<sentence.max_size()<<endl;
cout<<"size():"<<sentence.size()<<endl;
cout<<"capacity():"<<sentence.capacity()<<endl;
swap(sentence[1],sentence[3]);
sentence.insert(find(sentence.begin(),sentence.end(),"?"),"always");
cout<<sentence.at(5)<<endl;
sentence.back()="!";
cout<<sentence.at(5)<<endl;
copy(sentence.begin(),sentence.end(),ostream_iterator<string>(cout," "));
cout<<endl;
cout<<"max_size():"<<sentence.max_size()<<endl;
cout<<"size():"<<sentence.size()<<endl;
cout<<"capacity():"<<sentence.capacity()<<endl;
system("pause");
return 0;
}
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询