vector类(下)

简介: vector类(下)

vector类(上)         https://developer.aliyun.com/article/1565453



🌙Capacity(容量)

学习这个板块还是比较简单的,也运用比较广泛的一个板块。



💫size

size函数计算元素总个数的。



咱们看看代码:

#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> v1{ 1,2,3,4,5 };
    cout << v1.size() << endl;
    cout << v1.capacity() << endl;
    return 0;
}


运行结果:



💫max_size

size函数计算该对象最多容乃多少个元素



咱们看看代码:

#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
  vector<int> v;
  cout << "该对象最多容乃多少个元素" << endl;
  cout << v.max_size() << endl;
  return 0;
}


运行结果:



💫capacity

capacity函数作用是查看该对象的容量



咱们看看代码:

#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> v1{ 1,2,3,4,5 };
    cout << "size:" << v1.size() << endl;
    cout << "capacity:" << v1.capacity() << endl;
    cout << endl;
    return 0;
}


运行结果:



💫reserve和resize

reserve函数是扩容函数,可以增大capacity的值。


resize其实也是扩容函数,但resize改变的是size的值,当size的值增大时自动触发vector的扩容机制从而也增大了capacity的值。


resize在增带size值的时候还会对没有元素的位置初始化,如果没有指定初始化内容就默认初始化为空,而reserve不会进行初始化。



咱们看看代码:

#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> v1{ 1,2,3,4,5 };
    cout << "size:" << v1.size() << endl;
    cout << "capacity:" << v1.capacity() << endl;
    cout << endl;
 
    v1.reserve(25);
    cout << "size:" << v1.size() << endl;
    cout << "capacity:" << v1.capacity() << endl;
    cout << endl;
 
    v1.resize(50);
    cout << "size:" << v1.size() << endl;
    cout << "capacity:" << v1.capacity() << endl;
    cout << endl;
    return 0;
}


运行结果:



💫empty

empty函数作用是查看该对象的内容是否为空

  • 有元素返回为0
  • 没有元素返回为1



咱们看看代码:

#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> v1;
    cout << v1.empty() << endl;
    vector<int> v2{ 1 };
    cout << v2.empty() << endl;
    return 0;
}


运行结果:



🌙Element access(元素访问)

这个板块还是比较重要的,vector作用之一就是元素访问。


💫operator[ ]

在vector中我们将操作符[ ]进行了重载,使其[ ]可以像数组那样通过下标来获取对应的元素和修改对应的元素。



💫at函数

返回位置pos处的元素的引用。本质上还是一种遍历。



唯一与operator的区别就在于对于不合法的下标at会抛异常不会报错而[ ]会报错

咱们看看代码:

#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> v1{ 1,2,3,4,5 };
    for (unsigned i = 0; i < v1.size(); ++i)
    {
        std::cout << v1.at(i);
    }
    return 0;
}


运行结果:



🌙Modifiers(修改器)

在vector中修改器是十分重要的,大家务必多多练习,多多查看官网。



💫assign函数

这个函数可以改变vector的容量和长度。



咱们看看代码:

#include <iostream>
#include <vector>
 
int main()
{
  std::vector<int> first;
  std::vector<int> second;
  std::vector<int> third;
 
  first.assign(7, 100);             
 
  std::vector<int>::iterator it;
  it = first.begin() + 1;
 
  second.assign(it, first.end() - 1); 
 
  int myints[] = { 1776,7,4 };
  third.assign(myints, myints + 3);   
  std::cout << "Size of first: " << int(first.size()) << '\n';
  std::cout << "Size of second: " << int(second.size()) << '\n';
  std::cout << "Size of third: " << int(third.size()) << '\n';
  return 0;
}


运行结果:



💫push_back插入操作

将元素c追加到vector的末尾,使其长度增加一,也就是说push_back函数只能够尾插入一个元素,不能插入多个元素。



咱们看看代码:

#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> v1{ 1,2,3,4,5 };
 
    // 插入一个元素
    v1.push_back(10);
    for (auto ch : v1)
    {
        cout << ch<< " ";
    }
    return 0;
}


运行结果:



💫pop_back删除操作

擦除vector的最后一个元素,有效地将其长度减少一个,本质上可以实现vector对象的尾删操作。



咱们看看代码:

#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> v1{ 1,2,3,4,5 };
    v1.pop_back();
    for (auto ch : v1)
    {
        cout << ch<< " ";
    }
    return 0;
}


运行结果:



💫insert插入操作

insert函数可以在任意的指定位置进行插入。



咱们看看代码:

#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> v1{ 1,2,3,4,5 };
    for (auto ch : v1)
    {
        cout << ch<< " ";
    }
    cout << endl;
 
    // 在下标为0的位置插入一个10
    vector<int>::iterator it1 = v1.begin();
    v1.insert(it1, 10);
    for (auto ch : v1)
    {
        cout << ch << " ";
    }
    cout << endl;
    
    // 在下标为0的位置插入三个100
    vector<int>::iterator it2 = v1.begin() + 1;
    v1.insert(it2, 3, 100);
    for (auto ch : v1)
    {
        cout << ch << " ";
    }
    cout << endl;
    return 0;
}


运行结果:



 💫erase删除操作

erase函数则可以做到在vector对象中的任意位置删除指定元素或者删除一段区间的元素。



咱们看看代码:

#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> v1{ 1,2,3,4,5,6,7,8,9};
    for (auto ch : v1)
    {
        cout << ch << " ";
    }
    cout << endl;
 
    // 删除一个元素
    vector<int>::iterator it1 = v1.begin();
    v1.erase(it1);
    for (auto ch : v1)
    {
        cout << ch << " ";
    }
    cout << endl;
 
    // 删除一段元素
    vector<int>::iterator it2 = v1.begin();
    v1.erase(it2 + 1, v1.end() - 1);
    for (auto ch : v1)
    {
        cout << ch << " ";
    }
    cout << endl;
    return 0;
}


运行结果:



💫swap

clear函数是将全部的数据删除。



这里就不用代码演示了。


🌙Non-member function (非成员函数)

本来是不打算来讲解这块的,这里面只讲解swap,这个函数很容易搞混,在c++中有三个swap,每一个swap的作用都不一样,我们这里只讲解:



容器x的内容与y的内容交换。两个容器对象的类型必须相同(模板参数相同),但大小可能不同。


🌟结束语

      今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。


目录
相关文章
|
存储 消息中间件 JSON
DDD基础教程:一文带你读懂DDD分层架构
DDD基础教程:一文带你读懂DDD分层架构
|
存储 安全 前端开发
详解SpringSecurity认证(下)
详解SpringSecurity认证(下)
211 0
|
存储 数据可视化 Unix
关于“Python”的核心知识点整理大全50
关于“Python”的核心知识点整理大全50
127 0
|
存储 小程序 关系型数据库
python微信小程序看图猜成语源码flask
启动Idiom/flask下的venv虚拟环境,运行python manage.py runserver命令启动Flask。然后打开微信开发者工具并扫码登录,选择flask/weapp-idiom小程序,加载完成后进入小程序登录页面,
|
机器学习/深度学习
DCGAN代码解析(一)
DCGAN代码解析(一)
223 0
html+css实战150-定位-绝对定位
html+css实战150-定位-绝对定位
148 0
html+css实战150-定位-绝对定位
|
Java Spring
【小家Spring】资源访问利器---Spring使用ResourceLoader接口便捷的获取资源(ResourcePatternResolver、ResourceLoaderAware)(中)
【小家Spring】资源访问利器---Spring使用ResourceLoader接口便捷的获取资源(ResourcePatternResolver、ResourceLoaderAware)(中)
【小家Spring】资源访问利器---Spring使用ResourceLoader接口便捷的获取资源(ResourcePatternResolver、ResourceLoaderAware)(中)
|
存储 Kubernetes 监控
Elastic Cloud Kubernetes(ECK)安装Elasticsearch、Kibana实战教程
本文介绍了如何使用ECK在k8s集群中安装Elasticsearch、Kibana
3808 0