C++ 动态数组类模板(向量容器)vector与STL用法总结
2018-02-15 15:03
776 查看
vector(向量)类模板定义在头文件vector中,提供五种构造函数,可以针对不同情况进行初始化:
vector类模板重载了赋值运算符=,允许同类型的vector对象相互赋值,对长度没有要求,即可以改变赋值目标对象的大小,使得赋值目标的长度和赋值源的长度(size())保持一致。若赋值目标的长度小于赋值源长度,则对其进行扩充,使得扩充后的capacity和赋值源的size保持一致。
vector的容量信息相关的成员函数:
size():返回当前对象中已存放(初始化)的元素的个数。
max_size():返回当前对象所能容纳的最大元素个数,取决于系统的硬件结构。
capacity():返回当前已经分配的空间所能容纳的元素个数。初始值为最初分配的空间大小(元素个数),当存放空间已满,再增加元素个数时,capacity在原来的基础上翻倍。
vector的访问对象的成员函数:
front():返回vector对象中的第一个元素
back():返回vector对象的最后一个元素
在vector中插入元素的方法
push_back(const T&):在向量末尾插入一个T类型的元素,size+1,capacity如果不足则翻倍。
insert(iterator it,const T&):在it所指的位置前插入新元素。
insert (iterator it, size_type n,const T&X):在it所指位置前插入n个值为X的T类数据。
在vector中声明迭代器
vector类包含了一个typedef iterator,这是一个public成员。通过iterator,可以声明向量中的迭代 器。例如,语句:
因为iterator是一个定义在vector类中的typedef,所以必须使用容器名(vector)、容器元素类型 和作用域符来使用iterator。
表达式:
将迭代器intVecIter加1,使其指向容器中的下一个元素。表达式:
返回当前迭代器位置上的元素。
迭代器上的这些操作和指针上的相应操作是相同的。
vector_name.begin()返回指向第一个元素的迭代器,vector_name.end()返回指向末尾元素后一位的迭代器。
使用STL库函数输出向量对象
正向输出,每个元素后输出一个ch:
逆向输出,每个元素后输出一个ch:
使用上述代码时,应include头文件functional和iterator:前者对应copy函数,后者对ostream_iterator进行定义。
在向量中删除对象
pop_back(const T&):删除向量中的最后一个元素,所分配的空间仍然保留
erase(iterator it):删除it所指向的元素
clear():删除向量中的所有元素,empty()返回true。
测试代码(部分):
vector<type> name;//构造一个空的vector对象
vector<type> name(length);//构造一个长度为length的vector对象,所有元素初始化为0
vector<type> name(length,n);//构造一个长度为length的vector对象,所有元素初始化为n
vector<type> name(name1);//复制构造,用已定义的对象name1初始化构造name
vector<type> name(array,array+length);//构造一个长度为length+1的vector对象,并用数组初始化。array为type类型数据的地址(指针或数组名),从array指向的元素起向后依次对vector中的元素赋值。
vector类模板重载了赋值运算符=,允许同类型的vector对象相互赋值,对长度没有要求,即可以改变赋值目标对象的大小,使得赋值目标的长度和赋值源的长度(size())保持一致。若赋值目标的长度小于赋值源长度,则对其进行扩充,使得扩充后的capacity和赋值源的size保持一致。
vector的容量信息相关的成员函数:
size():返回当前对象中已存放(初始化)的元素的个数。
max_size():返回当前对象所能容纳的最大元素个数,取决于系统的硬件结构。
capacity():返回当前已经分配的空间所能容纳的元素个数。初始值为最初分配的空间大小(元素个数),当存放空间已满,再增加元素个数时,capacity在原来的基础上翻倍。
vector的访问对象的成员函数:
front():返回vector对象中的第一个元素
back():返回vector对象的最后一个元素
operator [ ](size_type,n):[ ]的重载,返回对象的第n+1个元素
在vector中插入元素的方法
push_back(const T&):在向量末尾插入一个T类型的元素,size+1,capacity如果不足则翻倍。
insert(iterator it,const T&):在it所指的位置前插入新元素。
insert (iterator it, size_type n,const T&X):在it所指位置前插入n个值为X的T类数据。
在vector中声明迭代器
vector类包含了一个typedef iterator,这是一个public成员。通过iterator,可以声明向量中的迭代 器。例如,语句:
vector<int>::iterator intVeciter;将intVecIter声明为int类型的向量容器迭代器。
因为iterator是一个定义在vector类中的typedef,所以必须使用容器名(vector)、容器元素类型 和作用域符来使用iterator。
表达式:
++intVecIter
将迭代器intVecIter加1,使其指向容器中的下一个元素。表达式:
*intVecIter
返回当前迭代器位置上的元素。
迭代器上的这些操作和指针上的相应操作是相同的。
vector_name.begin()返回指向第一个元素的迭代器,vector_name.end()返回指向末尾元素后一位的迭代器。
使用STL库函数输出向量对象
正向输出,每个元素后输出一个ch:
copy(at.begin(), at.end(), ostream_iterator <type>(cout,"ch"));
逆向输出,每个元素后输出一个ch:
reverse_copy(at.begin(), at.end(), ostream_iterator <type>(cout,"ch"));
使用上述代码时,应include头文件functional和iterator:前者对应copy函数,后者对ostream_iterator进行定义。
在向量中删除对象
pop_back(const T&):删除向量中的最后一个元素,所分配的空间仍然保留
erase(iterator it):删除it所指向的元素
clear():删除向量中的所有元素,empty()返回true。
测试代码(部分):
#include <vector> #include <functional> #include <iterator> #include <algorithm> using namespace std; int main() { int ay[10] = {1,2,3,4,5,6,7,8,9}; int *p = ay; vector<int> at(ay,ay + 7); vector<int> as(p,p + 3); copy(as.begin(),as.end(),ostream_iterator <int>(cout,"*")); cout << endl; at.pop_back(); cout << endl << at.size() << endl << at.capacity() << endl; as = at; copy(at.begin(),at.end(),ostream_iterator <int>(cout,"-")); cout << endl << as.size() << endl << as.capacity() << endl; cout << *(at.begin()+1) << endl << *at.end() << endl; return 0; }
相关文章推荐
- 【C++】STL常用容器总结之三:向量vector
- C++STL中vector(可变大小数组)用法总结
- C++ STL之vector用法总结
- C++STL中vector容器的用法
- [C++]STL中vector容器 begin()与end()函数、front()与back()的用法
- C++STL中vector容器的用法
- 【STL容器-vector用法总结(1)】
- C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)
- C++ STL--vector向量容器学习笔记
- C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)
- C++中vector容器的基本用法总结
- C++STL泛型编程——vector向量容器
- c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件
- C++学习 STL之二:vector容器用法详解
- C++STL中vector容器 begin()与end()函数、front()与back()的用法
- C++ STL之vector用法总结
- C++STL中vector容器 begin()与end()函数、front()与back()的用法
- C++STL中vector容器 begin()与end()函数、front()与back()的用法
- C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)
- C++ STL学习笔记二 vector向量容器