vector数据结构和数组很相似,也称为单端数组
与普通数组区别:数组是静态空间,vector可以动态扩展
动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
1.构造函数
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void printvector(vector<int>&v){
for(vector<int>::iterator it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test01(){
vector<int>v;
for(int i=0;i<10;i++){
v.push_back(i);
}
printvector(v);
vector<int>v1(v.begin(),v.end());
printvector(v1);
vector<int>v2(10,100);//10个100
printvector(v2);
vector<int>v3(v2);
printvector(v3);
}
int main(){
test01();
}
2.赋值操作
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void printvector(vector<int>&v){
for(vector<int>::iterator it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test01(){
vector<int>v;
for(int i=0;i<10;i++){
v.push_back(i);
}
printvector(v);
vector<int>v1;
v1=v;
printvector(v1);
vector<int>v2;
v2.assign(v1.begin(),v1.end());
printvector(v2);
vector<int>v3;
v3.assign(10,100);
printvector(v3);
}
int main(){
test01();
}
3.vector容量和大小
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void printvector(vector<int>&v){
for(vector<int>::iterator it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test01(){
vector<int>v;
for(int i=0;i<10;i++){
v.push_back(i);
}
printvector(v);
if(v.empty())
cout<<"empty"<<endl;
else
cout<<"no"<<endl;
cout<<v.capacity()<<endl;
cout<<v.size()<<endl;
//重新指定大小
v.resize(15);//默认用0填充
v.resize(15,100);//利用重载版本,可以指定填充值
printvector(v);
v.resize(5);
printvector(v);
}
int main(){
test01();
}
4.vector插入和删除
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void printvector(vector<int>&v){
for(vector<int>::iterator it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test01(){
vector<int>v;
for(int i=0;i<10;i++){
v.push_back(i);//尾插
}
printvector(v);
v.pop_back();//尾删
printvector(v);
v.insert(v.begin(),100);//迭代器向指定位置插入元素
printvector(v);
v.insert(v.begin(),2,1000);//重载版本,迭代器向指定位置插入n个元素
printvector(v);
v.erase(v.begin());//提供迭代器
printvector(v);
v.erase(v.begin(),v.end());//清空
v.clear();//清空
printvector(v);
}
int main(){
test01();
}
5.vector数据存取
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void printvector(vector<int>&v){
for(vector<int>::iterator it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test01(){
vector<int>v;
for(int i=0;i<10;i++){
v.push_back(i);//尾插
}
printvector(v);
cout<<v[0]<<endl;//[]访问数组中元素
cout<<v.at(1)<<endl;//at访问
cout<<v.front()<<v.back()<<endl;//获取第一个元素front,最后一个元素back
}
int main(){
test01();
}
6.vector互换容器
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void printvector(vector<int>&v){
for(vector<int>::iterator it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test01(){
vector<int>v;
for(int i=0;i<10;i++){
v.push_back(i);//尾插
}
printvector(v);
vector<int>v1;
v1.push_back(2000);
printvector(v1);
v.swap(v1);
printvector(v);
printvector(v1);
}
//实际用途 收缩内存空间
void test02(){
vector<int>v1;
for(int i=0;i<10000;i++){
v1.push_back(i);//尾插
}
cout<<v1.capacity()<<v1.size()<<endl;
v1.resize(3);//容量还是很大,只是size小了
cout<<v1.capacity()<<v1.size()<<endl;
//巧用swap收缩内存
//vector<int>(v1) ---匿名对象
//匿名对象 当前行执行完,系统自动回收内存
vector<int>(v1).swap(v1);
cout<<v1.capacity()<<v1.size()<<endl;
}
int main(){
test02();
}
7.vector预留空间
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void test01(){
vector<int>v;
int num=0;//统计开辟次数
//利用reserve预留空间
v.reserve(100000);
int *p=NULL;
for(int i=0;i<100000;i++){
v.push_back(i);
if(p!=&v[0]){
p=&v[0];
num++;
}
}
cout<<num<<endl;
}
int main(){
test01();
}