C++标准库---vector使用注意事项

180it 2020-10-15 PM 2540℃ 0条

使用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;
}

5190636.png

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

C++标准库---vector使用注意事项