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的内容交换。两个容器对象的类型必须相同(模板参数相同),但大小可能不同。


🌟结束语

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


目录
相关文章
|
6月前
|
安全 Java uml
|
4月前
|
Java C++ Python
vector类(上)
vector类(上)
46 0
|
6月前
|
存储 安全 Java
ArrayList和Vector及Vector的区别
综上所述,选择ArrayList、Vector还是LinkedList取决于您的具体需求。如果需要高性能、随机访问元素,且不需要考虑线程安全,ArrayList是一个不错的选择。如果需要线程安全,可以考虑使用Vector,但需要注意性能问题。如果需要频繁插入和删除元素,LinkedList可能更适合。
54 3
|
11月前
|
Linux 编译器 测试技术
【C++】STL之vector类模拟-3
【C++】STL之vector类模拟
34 0
|
11月前
|
安全 C++ 容器
【C++】STL之vector类模拟-1
【C++】STL之vector类模拟
35 0
|
11月前
|
C++ 容器
【C++】STL之vector类模拟-2
【C++】STL之vector类模拟
39 0
|
11月前
|
存储 算法 C语言
【C++】STL之vector类概述-1
【C++】STL之vector类概述
67 0
|
11月前
|
算法 Linux C++
【C++】STL之vector类概述-2
【C++】STL之vector类概述
47 0
|
C++ 容器
【C++】vector中的常见函数和使用
【C++】vector中的常见函数和使用
64 0