广州低价网站建设,2345网址导航电脑版大全,网页特效代码大全,网站的后期维护文章目录 STL基本概念使用STL的好处容器vector1.vector容器简介2.vector对象的默认构造函数3.vector对象的带参构造函数4.vector的赋值5.vector的大小6.vector容器的访问方式7.vector的插入 STL基本概念
STL(Standard Template Library,标准模板库)STL 从广义上分为: 容器(con… 文章目录 STL基本概念使用STL的好处容器vector1.vector容器简介2.vector对象的默认构造函数3.vector对象的带参构造函数4.vector的赋值5.vector的大小6.vector容器的访问方式7.vector的插入 STL基本概念
STL(Standard Template Library,标准模板库)STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator)迭代器算法通过迭代器访问容器里面的数据容器和算法之间通过迭代器进行无缝连接。STL 几乎所有的代码都采用了模板类或者模板函数这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会
使用STL的好处
STL是C的一部分因此不需要额外安装什么被内建在你的编译器里面STL的一个重要特点是将数据结构和算法分离程序员不用思考STL的实现过程STL具有高可用性高性能高移植跨平台优点
容器
序列式容器
序列式容器每个元素都有固定位置–取决于插入的时机和地点和元素值无关。vectordeque、list、stack、queue
关联式容器
元素位置取决于特定的排序准则和插入顺序无关set、multiset、map、multimap vector
1.vector容器简介
尾部插入速度比较快vector是将元素置于一个动态数组中加以管理的容器vector可以随机存取元素支持索引值直接存取vector尾部添加或移除元素的速度非常快速但是在头部插入或移除元素比较费时
2.vector对象的默认构造函数
vectorclass TvecT;
vectorintvecInt;
vectorfloatvecFloat;
vectorstringvecString;class A{};
vectorAvecA; //用于存放CA对象的vector容器
//由于容器元素的存放是按值复制的方式进行所以此时CA必须提供CA的拷贝构造函数以保证CA对象间拷贝正常vectorA*vecpA; //用于存放CA对象指针的vector容器3.vector对象的带参构造函数
理论知识
vector(begend); //构造函数将[beg,end)区间中的元素拷贝给本身注意该区间左闭右开vector(n,elem);//构造函数将n个elem拷贝给本身vector(const vector vec); //拷贝构造函数
int main()
{int arr[] { 1,2,3,4,5 }; //用两个指针构造vectorintv1(arr, arr 5);vectorintv2(3, 10);//存储3个10for (int i 0; i v2.size(); i){cout v2[i] ;}cout endl;vectorintv3(v1);//用一个已经构造好的对象初始化新的对象for (int i 0; i v1.size(); i){cout v3[i] ;}
}4.vector的赋值
vector.assign(beg,end);//将[beg,end)区间中的元素拷贝赋值给本身注意该区间左闭右开vector.assign(n,elem);//将n个elem拷贝赋值给本身vector operator(const vector vec);//重载等号操作符vector.swap(vec); //将vec与本身的元素互换
int main()
{vectorintvecIntA(3, 10);vectorint vecIntB, vecIntC, vecIntD;int iarray[] { 0,1,2,3,4 };//将数组iarray中的所有元素赋值给vactorIntA容器vecIntA.assign(iarray, iarray 5);cout A;for (int i 0; i vecIntA.size(); i){cout vecIntA[i] ;}cout endl;//将vecIntA中所有元素赋值给vecIntBvecIntB.assign(vecIntA.begin(), vecIntA.end());cout B1;for (int i 0; i vecIntB.size(); i){cout vecIntB[i] ;}cout endl;cout B2;vecIntB.assign(vecIntA.begin()2, vecIntA.end()-1);for (int i 0; i vecIntB.size(); i){cout vecIntB[i] ;}cout endl;//将4个10拷贝到vecIntCvecIntC.assign(4, 10);cout C;for (int i 0; i vecIntC.size(); i){cout vecIntC[i] ;}cout endl;//互换元素vecIntB.swap(vecIntC);cout B2;for (int i 0; i vecIntB.size(); i){cout vecIntB[i] ;}cout endl;cout C;for (int i 0; i vecIntC.size(); i){cout vecIntC[i] ;}cout endl;//重载赋值运算符vecIntD vecIntC;cout D;for (int i 0; i vecIntD.size(); i){cout vecIntD[i] ;}return 0;
}5.vector的大小
vector.size(); //返回容器中元素的个数vector.empty(); //判断容器是否为空vector.resize(); //重新指定容器的长度为num,若容器变长则以默认值填充新位置。如果容器变短则末尾超出容器长度的元素被删除vector.resize(num,elem);//重新指定容器的长度为num,若容器变长则以elem填充新位置。如果容器变短则末尾超出容器长度的元素被删除
int main()
{vectorintv1;cout v1.size: v1.size() endl;if (v1.empty()) //判断容器是否为空{cout v1 is empty endl;}int array[] { 1,2,3,4,5 };v1.assign(array, array 5);//将容器的长度变长v1.resize(10);for (int i 0; i v1.size(); i){cout v1[i] ;}cout endl;//将容器长度变短v1.resize(3);for (int i 0; i v1.size(); i){cout v1[i] ;}cout endl;//将容器长度变长并且扩展出来的新的元素为指定的值v1.resize(10, 100);for (int i 0; i v1.size(); i){cout v1[i] ;}cout endl;return 0;
}6.vector容器的访问方式
vec.at[idx]; //返回索引idx所指数据如果idx越界抛出out_of_range异常vec[idx]; //返回索引idx所指的数据越界时运行直接报错
7.vector的插入
在vector末尾进行插入push_back、在末尾删除元素pop_backvector.insert(pos,elem); //在pos位置插入一个elem元素的拷贝返回新数据的位置vector.insert(pos,n,elem);//在pos位置插入n个elem数据无返回值vector.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据无返回值
int main()
{int arr[] { 1,2,3,4,5 };vectorintv1(arr, arr 5);//在末尾插入函数v1.push_back(10);//在末尾删除函数v1.pop_back();//在指定位置插入一个指定元素v1.insert(v1.begin()3,100); //注意第一个参数不能为下标应该为指针for (int i 0; i v1.size(); i){cout v1[i] ;}cout endl;//在指定的位置插入多个元素v1.insert(v1.begin() 3, 3, 1000);//在下标为3的位置上插入3个1000for (int i 0; i v1.size(); i){cout v1[i] ;}cout endl;//将指定的区间中的元素插入到指定的位置上,将50—80插入int b[] { 40,50,60,70,80,90 };v1.insert(v1.begin() 7, b 1, b 5);for (int i 0; i v1.size(); i){cout v1[i] ;}cout endl;
}