STL总结与常见面试题( 二 )

运行结果

STL总结与常见面试题

文章插图
 
运行结果
vectorvector 是表示可以改变大小的数组的序列容器 。
方法说明vector构造函数~vector析构函数,销毁容器对象operator=将新内容分配给容器,替换其当前内容,并相应地修改其大小begin返回指向容器中第一个元素的迭代器end返回指向容器中最后一个元素之后的理论元素的迭代器rbegin返回指向容器中最后一个元素的反向迭代器rend返回一个反向迭代器,指向中第一个元素之前的理论元素cbegin返回指向容器中第一个元素的常量迭代器(const_iterator)cend返回指向容器中最后一个元素之后的理论元素的常量迭代器(const_iterator)crbegin返回指向容器中最后一个元素的常量反向迭代器(const_reverse_iterator)crend返回指向容器中第一个元素之前的理论元素的常量反向迭代器(const_reverse_iterator)size返回容器中元素的数量max_size返回容器可容纳的最大元素数resize调整容器的大小,使其包含 n(参数)个元素capacity返回当前为 vector 分配的存储空间(容量)的大小empty返回 vector 是否为空reserve请求 vector 容量至少足以包含 n(参数)个元素shrink_to_fit要求容器减小其 capacity(容量)以适应其 size(元素数量)operator[]返回容器中第 n(参数)个位置的元素的引用at返回容器中第 n(参数)个位置的元素的引用front返回对容器中第一个元素的引用back返回对容器中最后一个元素的引用data返回指向容器中第一个元素的指针assign将新内容分配给 vector,替换其当前内容,并相应地修改其 sizepush_back在容器的最后一个元素之后添加一个新元素pop_back删除容器中的最后一个元素,有效地将容器 size 减少一个insert通过在指定位置的元素之前插入新元素来扩展该容器,通过插入元素的数量有效地增加容器大小erase从 vector 中删除单个元素(position)或一系列元素([first,last)),这有效地减少了被去除的元素的数量,从而破坏了容器的大小swap通过 x(参数)的内容交换容器的内容,x 是另一个类型相同、size 可能不同的 vector 对象clear从 vector 中删除所有的元素(被销毁),留下 size 为 0 的容器emplace通过在 position(参数)位置处插入新元素 args(参数)来扩展容器emplace_back在 vector 的末尾插入一个新的元素,紧跟在当前的最后一个元素之后get_allocator返回与vector关联的构造器对象的副本swap(vector)容器 x(参数)的内容与容器 y(参数)的内容交换 。两个容器对象都必须是相同的类型(相同的模板参数),尽管大小可能不同relational operators (vector)形如 vectorA > vectorB;依此比较每个元素的大小关系
测试代码#include <vector>#include <iostream>using namespace std;int main(){ //构造函数,复制构造函数(元素类型要一致), vector<int> vecA;//创建一个空的的容器 vector<int> vecB(10,20); //创建一个10个元素,每个元素值为20 vector<int> vecC(vecB.begin(),vecB.end()); //使用迭代器,可以取部分元素创建一个新的容器 vector<int> vecD(vecC); //复制构造函数,创建一个完全一样的容器 //重载= vector<int> vecE; vecE = vecB; //vector::begin(),返回的是迭代器 vector<int> vecF(10); //创建一个有10个元素的容器 cout << "vecF:"; for (int i = 0; i < 10; i++) {vecF[i] = i;cout << vecF[i]<< " "; } cout << endl; //vector::begin() 返回迭代器 vector<int>::iterator Beginit = vecF.begin(); cout<< "vecF.begin():" << *Beginit << endl;//vector::end() 返回迭代器 vector<int>::iterator EndIter = vecF.end(); EndIter--; //向后移一个位置 cout <<"vecF.end():"<< *EndIter << endl;//vector::rbegin() 返回倒序的第一个元素,相当于最后一个元素 vector<int>::reverse_iterator ReverBeIter = vecF.rbegin(); cout << "vecF.rbegin(): "<< *ReverBeIter << endl;//vector::rend() 反序的最后一个元素下一个位置,也相当于正序的第一个元素前一个位置 vector<int>::reverse_iterator ReverEnIter = vecF.rend(); ReverEnIter--; cout << "vecF.rend():"<< *ReverEnIter << endl;//vector::size() 返回元素的个数 cout << "vecF.size():"<< vecF.size() << endl;//vector::max_size() cout << "vecF.max_size():"<< vecF.max_size() << endl;//vector::resize() cout<< "vecF.size():" << vecF.size() << endl;vecF.resize(5); cout<< "调整vecF大小后重新赋值:";for(int k = 0; k < vecF.size(); k++)cout << vecF[k] << "";cout << endl; //vector::capacity() cout<< "调整后vecF.size():"<< vecF.size() << endl;cout<< "调整后vecF.capacity():" << vecF.capacity() << endl;//vector::empty() vecB.resize(0); cout<< "vecB.resize(0)后"<< endl;cout<< "vecB.size():" << vecB.size() << endl;cout<< "vecB.capacity():" << vecB.capacity() << endl;if(vecB.empty())cout << "vecB为空"<< endl;elsecout << "vecB不为空"<< endl;//vector::reserve() //重新分配存储空间大小 cout<< "vecC.capacity():" << vecC.capacity() << endl; // vecC.reserve(4); cout << "vecC.reserve(4)后vecC.capacity(): "<< vecC.capacity() << endl; //10 vecC.reserve(14); cout << "vecC.reserve(14)后vecC.capacity(): "<< vecC.capacity() << endl; //14 //vector::operator [] cout << "vecF[0]:"<< vecF[0] << endl; //第一个元素是0 //vector::at() try {cout << "vecF.size = " << vecF.size() << endl; //5cout << vecF.at(6) << endl; //抛出异常 } catch(out_of_range) {cout << "at()访问越界" << endl; } //vector::front() 返回第一个元素的值 cout << "vecF.front():"<< vecF.front() << endl; //0 //vector::back() cout << "vecF.back():"<< vecF.back() << endl; //4 //vector::assign() cout <<"vecA.size():"<< vecA.size() << endl; //0 vector<int>::iterator First = vecC.begin(); vector<int>::iterator End = vecC.end()-2; vecA.assign(First,End); cout << vecA.size() << endl; //8 cout << vecA.capacity() << endl; //8 vecA.assign(5,3); //将丢弃原来的所有元素然后重新赋值 cout << vecA.size() << endl; //5 cout << vecA.capacity() << endl; //8 //vector::push_back() cout << *(vecF.end()-1) << endl; //4 vecF.push_back(20); cout << *(vecF.end()-1) << endl; //20 //vector::pop_back() cout << *(vecF.end()-1) << endl; //20 vecF.pop_back(); cout << *(vecF.end()-1) << endl; //4 //vector::swap() cout << "vecF:"; for (int i = 0; i < vecF.size(); i++) {vecF[i] = i;cout << vecF[i]<< " "; } cout << endl; cout << "vecD:"; for (int d = 0; d < vecD.size(); d++) {vecD[d] = d;cout << vecD[d]<< " "; } cout << endl; vecF.swap(vecD); //交换这两个容器的内容 cout <<"vecD与vecF交换后:" <<endl; cout << "vecF:"; for(int f = 0; f < vecF.size(); f++)cout << vecF[f] << " "; cout << endl; cout << "vecD:"; for (int d = 0; d <vecD.size(); d++)cout << vecD[d] << " "; cout << endl; //vector::clear() vecF.clear(); cout << "vecF.clear()后vecF.size():"<< vecF.size() << endl;//0 cout << "vecF.clear()后vecF.capacity():"<< vecF.capacity() << endl; //10 return 0;}


推荐阅读