c++打卡第三十六天

一、STL中的vector容器

    vector开辟的动态数组区间为[begin,end),示意图如下。

 

1、容器放内置数据类型

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
//一、vector容器存放内置数据类型
//容器 :vector
//算法 :for_each
//迭代器 :vector<int>::iterator
void print(int val)
     {
         cout<<val<<endl;
     }
 void test01()
 {
     vector<int>v;
     v.push_back(32);
     v.push_back(132);
     v.push_back(232);
     v.push_back(332);
     v.push_back(432);
//         第一种遍历方式
    vector<int>::iterator begin=v.begin();//指向数组的第一个元素的位置
    vector<int>::iterator end=v.end();//end所指为数组最后一位的位置的下一位
    while(begin!=end)
    {
        cout<<*begin<<endl;
        begin++;
    }
//    第二种遍历方式
    for(vector<int>::iterator begin=v.begin();begin!=v.end();begin++)
    {
        cout<<*begin<<endl;
     }
//     第三种遍历方式
     for_each(v.begin(),v.end(),print);//需要调用库函数algorithm
  }
int main() {
    test01();
    test02();
    test03(); 
    return 0;
}

2、容器嵌套

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
void test01()
{
    vector<vector<int> >v;
    vector<int>v1;
    vector<int>v2;
    vector<int>v3;
    vector<int>v4;
    for(int i=1;i<6;i++)
    {
        v1.push_back(i+6);
        v2.push_back(i+7);
        v3.push_back(i+8);
        v4.push_back(i+9);
    }
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);
    v.push_back(v4);
    for(vector<vector<int> >::iterator it=v.begin();it!=v.end();it++)
    {
        for(vector<int>::iterator vit=(*it).begin();vit!=(*it).end();vit++)
        {
            cout<<*vit<<" ";
        }
        cout<<endl;
    }
 } 
int main() {
    test01();
    return 0;
}

3、容器构造

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
void prinnt(vector<int>&v1)
{
    for(vector<int>::iterator it=v1.begin();it!=v1.end();it++)
    {
        cout<<*it<< " ";
    }
    cout<<endl;
}
void test01()
{
    vector<int>v1;
    //默认构造 无参构造 
    for(int i;i<10;i++)
    {
        v1.push_back(i+1);
     } 
     prinnt(v1);
     //通过区间构造 
     vector<int>v2(v1.begin(),v1.end()-1);
     prinnt(v2);
     //n个元素构造
     vector<int>v3(19,45);//19个45 
     prinnt(v3); 
     //拷贝构造
     vector<int>v4(v3);
     prinnt(v4); 
}
int main() {
    test01();
    return 0;
}

4、赋值操作

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
void prinnt(vector<int>&v1)
{
    for(vector<int>::iterator it=v1.begin();it!=v1.end();it++)
    {
        cout<<*it<< " ";
    }
    cout<<endl;
}
void test01()
{
    vector<int>v1;
    //默认构造 无参构造 
    for(int i;i<10;i++)
    {
        v1.push_back(i+1);
     } 
     prinnt(v1);
     //赋值
     vector<int>v2;
     v2=v1;
     prinnt(v2);
     //assign
     vector<int>v3;
      v3.assign(v1.begin(),v1.end());
      prinnt(v3);
      //n个m
      vector<int>v4;
      v4.assign(14,88);
      prinnt(v4); 
}
int main() {
    test01();
    return 0;
}

5、容器容量的大小

#include<iostream>
#include<vector>
using namespace std;
//vector容器容量的 大小
void prinnt(vector<int>&v1) {
    for(vector<int>::iterator it=v1.begin(); it!=v1.end(); it++) {
        cout<<*it<< " ";
    }
    cout<<endl;
}
void test01() {
    vector<int>v1;
    //默认构造 无参构造
    for(int i; i<10; i++) {
        v1.push_back(i+2);
    }
    prinnt(v1);
    if(v1.empty()) {
        cout<<"v1为空"<<endl;
    } else {
        cout<<"v1不为空"<<endl;
        cout<<"v1的容量为"<<v1.capacity() <<endl;
        cout<<"v1的大小为"<<v1.size() <<endl;
    }
    v1.resize(7,100);//重新指定大小 ,若比原来长,用0填充v1.resize(15,100)可以填充100 
    prinnt(v1);
        cout<<"v1的大小为"<<v1.size() <<endl;
}
int main() {
    test01();
    return 0;
}

6、容器的插入和删除

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
void prinnt(vector<int>&v1) {
    for(vector<int>::iterator it=v1.begin(); it!=v1.end(); it++) {
        cout<<*it<< " ";
    }
    cout<<endl;
}
void test01() {
    vector<int>v1;
    //尾插法
    v1.push_back(10);
    v1.push_back(30);
    v1.push_back(50);
    v1.push_back(70);
    prinnt(v1);
    //尾删
    v1.pop_back();
    prinnt(v1);
    //插入
    v1.insert(v1.begin(),14);
    prinnt(v1);
    //插入n个数
    v1.insert(v1.begin(),3,17);
    prinnt(v1);
    //删除
    v1.erase(v1.begin());
     prinnt(v1);
     //区间删除
      v1.erase(v1.begin(),v1.begin()+2);
     prinnt(v1);
     //清空
     v1.clear();
     prinnt(v1);
      
}
int main() {
    test01();
    return 0;
}

 

7、容器的互换

#include<iostream>
#include<vector>
using namespace std;
//vector容器的互换 
void prinnt(vector<int>&v1) {
    for(vector<int>::iterator it=v1.begin(); it!=v1.end(); it++) {
        cout<<*it<< " ";
    }
    cout<<endl;
}
void test01() {
    vector<int>v1;
    //默认构造 无参构造
    for(int i; i<10; i++) {
        v1.push_back(i+2);
    }
    prinnt(v1);

}
int main() {
    test01();
    return 0;
}

 

8、容器数据的存取

#include<iostream>
#include<vector>
using namespace std;
//vector容器数据的存取
//void prinnt(vector<int>&v1) {
//    for(vector<int>::iterator it=v1.begin(); it!=v1.end(); it++) {
//        cout<<*it<< " ";
//    }
//    cout<<endl;
//}
void test01() {
    vector<int>v1;
    //默认构造 无参构造
    for(int i; i<10; i++) {
        v1.push_back(i+2);
    }
    //利用[]访问数组元素
    for(int i=0; i<v1.size(); i++) {
        cout<<v1[i]<<" ";
    }
    cout<<endl;
     //利用at访问
      for(int i=0; i<v1.size(); i++) {
        cout<<v1.at(i)<<" ";
    }
    cout<<endl;
    //获取第一个元素
    cout<<"获取第一个元素"<<v1.front()<<endl; 
    //获取倒数第一个元素
    cout<<"获取倒数第一个元素"<<v1.back()<<endl; 
}
int main() {
    test01();
    return 0;
}

9、容器的预存空间

#include<iostream>
#include<vector>
using namespace std;
//容器预留空间 reserve(int len);     
void test01()
{
    vector<int>v1;
    //默认构造 无参构造 
    int num=0;
    int *p=NULL; 
    //利用reserve预存空间
    v1.reserve(1000000);//经此之后开辟次数为1 
    for(int i; i<1000000; i++) {
        v1.push_back(i);
        if(p!=&v1[0])//当指针不指向首位时,将指针指向首位,当内存不够用再次开辟时,此时指针失效,我们再将其指向首地址。 
        {
            p=&v1[0];
            num++;
        }
    }
    cout<<"开辟内存总次数为为:"<<num<<endl;// 
}
int main() {
    test01();
    return 0;
}

10、与其他的不同

 

posted @ 2023-05-24 19:56  七安。  阅读(5)  评论(0编辑  收藏  举报