C++ 容器(二)——容器操作

发布于:2024-05-10 ⋅ 阅读:(26) ⋅ 点赞:(0)

一、容器的修改

容器修改函数

insert():在指定位置插入一个或多个元素
erase():删除指定位置或指定范围的元素
push_back():将元素添加到容器的末尾
pop_back():删除容器的最后一个元素
push_front():将元素添加到容器的开头
pop_front():删除容器的第一个元素
resize():改变容器的大小
capacity():输出的是Vector数组内部存储空间的容量大小

注:1、动态数组Vector没有提供头部增删(push_front()、pop_front())功能(和数组一样,删除除尾部索引的需要修改后面元素的索引值,很繁琐),链表list有。

2、resize():改变容器的大小(能容纳的元素个数)。

代码示例:通过上述函数,实现动态数组vector的增删改查。

#include <vector>
#include <list>
#include <iostream>
#include <string>
using namespace std;

int main()
{
    vector<int>vec = {1,2,3,4,5};
    list<int>lst = {1,2,3,4,5};
    
    auto it = vec.begin();
    vec.insert(it + 2,10);//在第三个位置插入元素10,迭代器加法操作只适用于vector容器操作

    it = vec.begin();
    vec.erase(it + 1);//删除第二个元素

    // 使用push_back()和pop_back()函数在容器尾部添加和删除元素
    vec.pop_back();//删除末尾元素
    vec.push_back(6);//添加末尾元素6

    // for(it = vec.begin();it != vec.end();it++)
    // {
    //     if(it != vec.end()-1)
    //     cout<<*it<<",";
    //     else
    //     cout<<*it;
    // }
    for(auto i:vec)//foreach遍历
    {
        cout<<i<<",";
    }
    cout<<endl;

    cout<<"vec动态数组的容器中元素个数是:"<<vec.capacity()<<endl;
    vec.resize(20);
    cout<<"修改容器大小后的容器元素个数:"<<vec.capacity()<<endl;
    // cout<<"容器vec所占内存空间大小为:"<<sizeof(vec)<<"字节"<<endl;

    // 使用push_front()和pop_front()函数在容器头部添加和删除元素
    lst.pop_front();
    lst.push_front(10);
    cout<<"lst中的元素有:";
    for(auto i = lst.begin();i != lst.end();i++)
    {
        if(i != lst.end()--)
        cout<<*i<<",";
        else
        cout<<*i;
    }
    return 0;
}

运行结果:

1,10,3,4,6,
vec动态数组的容器中元素个数是:10
修改容器大小后的容器元素个数:20
容器vec所占内存空间大小为:24字节
lst中的元素有:10,2,3,4,5,

 二、容器的操作

容器操作函数
sort():对容器中的元素进行排序 (不适用于list)
reverse():将容器中的元素反转
unique():去除容器中相邻的重复元素
count():计算容器中指定元素的数量
find():在容器中查找指定元素,并返回其位置的迭代器
remove():从容器中删除指定元素(将要删除元素移到末尾)

注:unique()、remove()函数操作方式,vector和list,不同,list(链表)可以直接使用,而vector需要配合erase()删除操作才能使用。

vector代码示例:

vec.erase(unique(vec.begin(),vec.end()),vec.end());
//将相邻并相等的元素,取其一,移动到数组的后面
//返回移动到数组末尾的第一个元素的迭代器
//最后将移动到数组末尾的元素进行删除。

vec.erase(remove(vec.begin(),vec.end(),4),vec.end());
//将要移除的元素(4),移动到数组的后面
//返回移动到数组末尾的第一个元素的迭代器
//最后将移动到数组末尾的元素进行删除。

list代码示例:

lst.unique();
lst.remove(4);

 三、案例代码

代码示例:

#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;

int main()
{
    vector<int>vec = {5,3,3,1,4,2};
    list<int>lst = {5,3,3,1,4,2};
    sort(vec.begin(),vec.end());
    for(auto it = vec.begin();it != vec.end();it++)
    {
        if(it != vec.end()-1)
        cout<<*it<<",";
        else
        cout<<*it;
    }
    cout<<endl;
    reverse(vec.begin(),vec.end());
    cout<<"---------------"<<endl;
    for(auto it = vec.begin();it != vec.end();it++)
    {
        if(it != vec.end()-1)
        cout<<*it<<",";
        else
        cout<<*it;
    }
    cout<<endl;
    vec.erase(unique(vec.begin(),vec.end()),vec.end());
    cout<<"---------------"<<endl;
    for(auto it = vec.begin();it != vec.end();it++)
    {
        if(it != vec.end()-1)
        cout<<*it<<",";
        else
        cout<<*it;
    }
    cout<<endl;
    vec.erase(remove(vec.begin(),vec.end(),4),vec.end());
    cout<<"---------------"<<endl;
    for(auto it = vec.begin();it != vec.end();it++)
    {
        if(it != vec.end()-1)
        cout<<*it<<",";
        else
        cout<<*it;
    }
    cout<<endl;

    lst.sort();
    lst.unique();
    lst.remove(4);
    cout<<"---------------"<<endl;
    auto i = lst.begin();
    advance(i,lst.size()-1);
    for(auto it = lst.begin();it != lst.end();it++)
    {
        if(it != i)
        cout<<*it<<",";
        else
        cout<<*it;
    }
    cout<<endl;
    
    return 0;
}

运行结果:

1,2,3,3,4,5
---------------
5,4,3,3,2,1
---------------
5,4,3,2,1
---------------
5,3,2,1
---------------
1,2,3,5

网站公告

今日签到

点亮在社区的每一天
去签到