标准库Vector类型
使用需要的头文件:#include <vector>Vector:Vector 是一个类模板。不是一种数据类型。 Vector<int>是一种数据类型。
Vector是STL中最常见的容器,它是一种顺序容器,支持随机访问。 vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似, 不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了; 而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量。
vector的扩充机制:按照容器现在容量的一倍进行增长。 vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加, 而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。 这时原有指向旧内存空间的迭代器已经失效,所以当操作容器时,迭代器要及时更新
一、 定义和初始化
Vectorv1; //默认构造函数v1为空Vector v2(v1); //v2是v1的一个副本Vector v3(n,i); //v3包含n个值为i的元素Vector v4(n); //v4含有n个值为0的元素
v.push_back(t) //在数组的最后添加一个值为t的数据v.size() //当前使用数据的大小v.empty() //判断vector是否为空v[n] //返回v中位置为n的元素v1=v2 //把v1的元素替换为v2元素的副本v1==v2 //判断v1与v2是否相等!=、<、<=、>、>= //保持这些操作符惯有含义
vector容器类型
vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。vector的构造函数原型:template<typename T>explicit vector(); // 默认构造函数,vector对象为空explicit vector(size_type n, const T& v = T()); // 创建有n个元素的vector对象vector(const vector& x);vector(const_iterator first, const_iterator last);注:vector容器内存放的所有对象都是经过初始化的。如果没有指定存储对象的初始值,那么对于内置类型将用0初始化,对于类类型将调用其默认构造函数进行初始化(如果有其它构造函数而没有默认构造函数,那么此时必须提供元素初始值才能放入容器中)。举例:vectorv1; // 创建空容器,其对象类型为string类vector v2(10); // 创建有10个具有初始值(即空串)的string类对象的容器vector v3(5, "hello"); // 创建有5个值为“hello”的string类对象的容器vector v4(v3.begin(), v3.end()); // v4是与v3相同的容器(完全复制)
bool empty() const; // 如果为容器为空,返回true;否则返回falsesize_type max_size() const; // 返回容器能容纳的最大元素个数size_type size() const; // 返回容器中元素个数size_type capacity() const; // 容器能够存储的元素个数,有:capacity() >= size()void reserve(size_type n); // 确保capacity() >= nvoid resize(size_type n, T x = T()); // 确保返回后,有:size() == n;如果之前size()
#include#include #include using namespace std;int main(){ vector v(5, "hello"); vector v2(v.begin(), v.end()); assert(v == v2); cout<<"> Before operation"< ::const_iterator it = v.begin(); it < v.end(); ++it) cout<<*it< After insert"< ::size_type i = 0; i < v.size(); ++i) cout< < ::iterator it = v.erase(v.begin() + 3, v.begin() + 6); assert(*it == "hello, world"); cout<<"> After erase"< ::size_type i = 0; i != v.size(); ++i) cout< < ::difference_type(v.size())); return 0;}
vector< int > line// 在使用的时候一定要首先将vi个行进行初始化;for(int i = 0 ; i < 10 ; i ++){ vector.push_back(line);}/// 个人认为使用vector定义二维数组很好,因为是长度可以不预先确定。很好。 (6)C++ Vector排序vector< int > vi ;vi.push_back(1);vi.push_back(3);vi.push_back(0);sort(vi.begin() , vi.end()); /// /小到大reverse(vi.begin(),vi.end()) /// 从大道小 (7)顺序访问vector < int > vi ;for( int i = 0 ; i < 10 ; i ++){ vector.push_back(i);}for(int i = 0 ; i < 10 ; i ++) /// 第一种调用方法{ cout <<<" " ;}for(vector ::iterator it = vi.begin() ;it !=vi.end() ; it++) ///第二种调用方法{ cout << *it << " " ;} (8)寻找 vector < int > vi ; for( int i = 0 ; i < 10 ; i ++) { vector.push_back(i); } vector < int >::interator it = find(vi.begin() , vi.end,3) ; cout << *it << endl ; ///返回容器内找到值的位置。 (9)使用数组对C++ Vector进行初始化 int i[10] ={ 1,2,3,4,5,6,7,78,8} ; ///第一种 vector vi(i+1,i+3); ///从第2个元素到第三个元素 for(vector ::interator it = vi.begin() ; it != vi.end() ; it++) { cout << *it <<" " ; } (10) 结构体类型struct temp{ public : string str ; public : int id ;}tmp int main(){ vector t ; temp w1 ; w1.str = "Hellowor" ; w1.id = 1 ; t.push_back(t1); cout << w1.str << "," < <