信息学奥赛第十一节 —— STL、vector的基本 *** 作

信息学奥赛第十一节 —— STL、vector的基本 *** 作,第1张

vector的入门概念
  • STL:标准模板库(一些容器的集合)
  • 容器:用来管理一类对象的集合。可以说数组也是一个容器。
  • 常见的容器:向量、栈、队列、优先队列、链表、集合、映射
  • 迭代器:用来遍历对象集合的元素,或者说迭代器是用来遍历容器中元素的工具。需要注意的是并不是所有的容器都支持迭代器,例如需要遵循先进后出原则的栈就不支持迭代器。

概念:vector是一个顺序的容器,能够存放各种类型的对象。可以将其理解为一个能存放任意类型的动态数组(可变长的数组)。

vector的初始化:

  • vector():创建一个空向量
  • vector(n):创建一个长度为n的向量
  • vector(n,t):创建一个长度为n,元素为t的向量

vector的定义:vector v;

vector中的函数
函数功能
insert(pos,x)插入元素x到vector的指定位置
push_back(x)添加一个元素x到vector的后面
erase(pos)删除指定位置的元素
erase(pos1,pos2)删除向量中[pos1,pos2]区间中的元素
pop_back()d出或删除vector的最后一个元素
clear()清除vector中所有的元素,size()变为0
front()取vector的第一个元素
back()取vector的最后一个元素
begin()返回vector的头指针,指向第一个元素
end()返回vector的尾指针,指向最后一个元素的下一个位置
运算符[i]取vector下标为i的元素
size()返回vector中实际元素的个数
empty()判断vector是否为空
vector与数组
  • 对于数组,其大小是固定的。vector的大小是可变的,开始vector为空,随着不断插入元素,vector自动申请空间,容量变大。一般每次申请空间的大小是现有元素的两倍。
  • 要熟练使用sort()reverse()等函数对vector进行排序、逆序等 *** 作
  • 当数组为空时,可以使用下标遍历数组。若数组定义为全局变量,则数组元素默认全为0。而当vector为空时,不能使用下标来访问。
测试代码
#include 
#include 
#include 
//reverse需要用到头文件algorithm

using namespace std;

void print(vector<int> v)//遍历容器函数
{
    for (int i = 0;i < v.size();i++) cout << v[i] << " ";
    cout << endl;
}

int main()
{
    vector<int> v;
    cout << v.size() << endl;//0
    
    v.push_back(2); v.push_back(3); v.push_back(1); v.push_back(4);
    cout << v.size() << endl;//4
    
    print(v);//2 3 1 4
    cout << v[0] << " " << v[1] << " " << v[2] << " " << v[3] << endl;//2 3 1 4
    
    cout << v.front() << " " << v.back() << endl;//2 4
    
    reverse(v.begin(),v.end());//逆序输出
    for (int i = 0;i < v.size();i++) cout << v[i] << " ";//4 1 3 2
    cout << endl;
    
    v.pop_back();//删除最后一个元素
    print(v);//4 1 3
    
    vector<int> v2(4);//定义一个长度为4的空容器
    print(v2);//0 0 0 0
    vector<int> v3(4,10);//定义一个长度为4,元素全为10的容器
    print(v3);//10 10 10 10
    
    v3.insert(v3.begin(),3);//在v3的开头插入1个3
    print(v3);//3,10 10 10 10
    v3.insert(v3.begin(),2,3);//在v3的开头插入2个3
    print(v3);//3,3,3,10 10 10 10
    v3.erase(v3.begin());//删除v3的第一个元素
    print(v3);//3 3 10 10 10 10 
    
    return 0;
}

以上代码的输出结果:

0
4
2 3 1 4
2 3 1 4
2 4
4 1 3 2
4 1 3
0 0 0 0
10 10 10 10
3 10 10 10 10
3 3 3 10 10 10 10
3 3 10 10 10 10

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/728513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存