一、操作
添加删除元素、设置容器大小以及获取容器元素。
二、容器类型别名(常用)
size_type:无符号整型,容器长度
iterator:迭代器;const_iterator:只读容器迭代器
value_type:元素类型
reference:元素引用
其他如逆序、迭代器差值等等。
示例:
1 void test() 2 { 3 int i; 4 vector<int>::size_type t; 5 vector<int>::iterator i; 6 .... 7 }
三、begin()和end()成员
c.begin():指向第一个元素的迭代器
c.end():指向最后一个元素后的迭代器
示例:
1 void test() 2 { 3 vector<int> v; 4 vector<int>::iterator it1=v.begin(); 5 vector<int>::iterator it2=v.end(); 6 }
四、插入操作
c.insert(p,e):在指定位置插入
c.insert(p,n,e):在指定位置插入n个元素
c.insert(p,b,e):在指定位置插入b迭代器开始e结束个元素
注意添加或删除元素会使迭代器失效
示例:
1 void test() 2 { 3 4 vector<int>v; 5 v.push_back(2); 6 v.push_back(3); 7 8 vector<int>::iterator it = v.begin() ; 9 v.insert(it, 2, 5); 10 for (auto s= v.begin(); s != v.end(); s++) 11 { 12 cout << *s << endl; 13 } 14 15 16 //vector<int>::iterator it2 = v.begin(); 17 //vector<int>::iterator it2 = v.insert(v.begin(), 2, 5);该种表述会报错 18 }
五、容器大小操作
c.size():返回容器大小;c::size_type类型
c.max_size():返回容器中最多可容纳元素个数
c.empty():判断容器是否为空
c.resize(n):调整容器的大小小为n
c.resize(n,t):调整容器的大小小为n,所有新添加的元素都为t
示例:
1 void test2() 2 { 3 vector<int>v; 4 v.push_back(1); 5 v.push_back(2); 6 v.push_back(3); 7 8 vector<int>::size_type s = v.size(); 9 cout << s << endl; 10 11 vector<int>::size_type max = v.max_size(); 12 cout << max << endl; 13 14 v.resize(5, -1); 15 s = v.size(); 16 cout << s << endl; 17 for (auto s = v.begin(); s != v.end(); s++) 18 { 19 cout << *s << endl; 20 } 21 22 }
六、访问元素
c.front():返回第一个元素的引用
c.back():返回最后一个元素的引用
c[n]/c.at(n):n索引位置的引用(仅适用于vector和deque)
示例:
1 void test3() 2 { 3 vector<int>v; 4 v.push_back(1); 5 v.push_back(2); 6 v.push_back(3); 7 8 int v1 = v.front(); 9 cout << v1 << endl; 10 11 v1 = *v.begin();//先获得指针,再解引用 12 cout << v1 << endl; 13 14 vector<int>::reference v2 = v.back(); 15 cout << v2 << endl; 16 17 cout << v[1] << endl; 18 cout << v.at(1) << endl; 19 20 }
七、删除元素
c.erase(p):删除迭代器p所指向的元素,返回一个迭代器,指向删除之后的元素
c.erase(b,e):删除b和e迭代器之间的元素,返回一个迭代器,指向删除之后的元素
c.clear():删除所有元素
c.pop_back():删除最后一个元素;c.pop_front():删除第一个元素
示例:
1 void test4() 2 { 3 vector<int>v; 4 v.push_back(1); 5 v.push_back(2); 6 v.push_back(3); 7 v.push_back(4); 8 v.push_back(5); 9 v.push_back(6); 10 v.push_back(7); 11 cout << v.size() << endl; 12 13 v.erase(v.begin());//删除第一个 14 for (auto s = v.begin(); s != v.end(); s++) 15 { 16 cout << *s << endl; 17 } 18 19 v.erase(v.begin(), v.begin()+3);//删除第一个到第三个 20 for (auto s = v.begin(); s != v.end(); s++) 21 { 22 cout << *s << endl; 23 } 24 25 v.pop_back();//删除最后一个 26 for (auto s = v.begin(); s != v.end(); s++) 27 { 28 cout << *s << endl; 29 } 30 31 v.clear();//清空,没有元素 32 cout << v.size() << endl; 33 34 35 }
八、赋值和交换
c1=c2;删除c1的所有元素,将c2中元素复制到c1
c1.swap(c2);c1、c2交换元素
c.assign(b,e);使用b和e之间的迭代器来重新设置c中的元素
c.assign(n,t);重新设置为存储n个值的t元素
九、vector的内存分配
示例:
1 void test5() 2 { 3 vector<int>v; 4 cout << v.size() << endl;//显示为0 5 cout << v.capacity() << endl;//显示为0 6 cout << "***********"<< endl; 7 for (int i = 0; i <= 10; i++) 8 v.push_back(i); 9 //预留空间 10 v.reserve(30); 11 //当前大小 12 cout << v.size() << endl;//显示为11 13 //空间大小 14 cout << v.capacity() << endl;//显示为30 15 16 }
原文地址:https://www.cnblogs.com/jiang-021/p/11607955.html