C++核心编程-vector容器

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();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值