【CSP考点总结】STL库函数

1.vector

  • pop_back():删除vector的最后一个元素,不返回被删除的元素
  • clear():清空vector中的所有元素
  • insert():insert(要插入的地址,要插入的元素);
    v.insert(v.begin()+2,-1); //将-1插入v[2]的位置
    
  • erase():删除指定位置的元素
    • 删除一个元素
      //删除v[3]
      v.erase(v.begin()+3);
      
    • 删除一个区间内的元素
      //删除v[1]到v[4]的元素
      v.erase(v.begin()+1,v.begin()+4);
      
  • empty():判断容器是否为空,如果vector为空,函数返回true;否则,返回false

2.set

  • 定义:set是一个内部自动有序且不含重复元素的容器,像定义变量一样定义set变量

    set<类型名> 变量名;
    set<类型名> array[SIZE];
    
  • 元素的访问:只能通过迭代器(iterator)访问

    set<int>::iterator it;
    

    这样,就得到了迭代器it,并且可以通过*it来访问set里的元素。

  • insert():插入元素十分简单。

  • find():find(value)返回的是set中value所对应的迭代器,也就是value的指针(地址)

    #include <iostream>
    #include <set>
    using namespace std;
    int main()
    {
        set<int> st;
        for (int i = 1; i <= 3; i++)
        {
            st.insert(i);
        }
    
        set<int>::iterator it = st.find(2); //在set中查找2,返回其迭代器
        cout << *it << endl;
    
        // 第二种写法
        cout << *(st.find(2)) << endl;
        return 0;
    }
    
  • erase():erase()有两种用法,删除单个元素、删除一个区间内的所有元素。

    1. 删除单个元素st.erase(value),value为所需要删除元素的值。其时间复杂度为O(logN),N为set内的元素个数。

      // 删除单个元素
      st.erase(100);    
      
    2. 删除一个区间内的所有元素:st.erase(iteratorBegin , iteratorEnd)可以删除一个区间内的所有元素。其中iteratorBegin为所需要删除区间的起始迭代器iteratorEnd为所需要删除区间的结束迭代器的下一个地址,也即是[iteratorBegin,iteratorEnd)

      #include <iostream>
      #include <set>
      using namespace std;
      
      //删除一个区间内的所有元素
      int main()
      {
          set<int> st;
          st.insert(100);
          st.insert(200);
          st.insert(100);
          st.insert(300);
          set<int>::iterator it = st.find(200);
          st.erase(it, st.end());
          for (it = st.begin(); it != st.end(); it++)
          {
              cout << *it << endl;
          }
          return 0;
      }
      

3.map

map是一个关联容器,它存储的是键值对,其中每个键都唯一地映射到一个值。键值对在map按照键的顺序进行排序map通常实现为红黑树,这是一种自平衡二叉搜索树。因此,大多数操作(如插入、删除、查找)的时间复杂度为O(log n),其中n是map中元素的数量。

(1)元素的访问

  • 通过下标进行访问,如:maps['c']=5;

  • 通过迭代器进行访问:map可以使用it->first来访问键,使用it->second访问值

    #include<map>
    #include<iostream>
    using namespace std;
    int main()
    {
    map<char,int>maps;
    maps['d']=10;
    maps['e']=20;
    maps['a']=30;
    for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
    {
        cout<<it->first<<" "<<it->second<<endl;
    }
    return 0;
    }
    

(2)成员函数

  • insert(): 插入键值对到map中。如果键已存在,则插入操作会失败

    // 定义一个map对象
    map<int, string> m;
    
    //用insert函数插入pair
    m.insert(pair<int, string>(111, "kk"));
    
    // 用数组方式插入
    m[123] = "dd";
    m[456] = "ff";
    
  • find(): 查找给定键的元素,返回指向该元素的迭代器。如果未找到,则返回指向map::end的迭代器

    map<string,int>::iterator it=maps.find("123");
    
  • erase(): 删除指定键的元素

    1. 使用键直接删除
    map<int, string> myMap;
    myMap[1] = "one";
    myMap[2] = "two";
    
    myMap.erase(1); // 删除键为1的元素
    

    2.使用迭代器范围删除

    myMap.erase(myMap.begin(), myMap.find(2)); // 删除从begin()到find(2)(不包括find(2)指向的元素)的所有元素
    
  • clear(): 清空map,删除所有元素。

  • empty(): 检查map是否为空。

  • size(): 返回map中元素的数量。

4.stack

stack是一种容器适配器,模拟了一种先进后出(LIFO,Last In First Out)的数据结构。它只允许在栈顶添加(push)或移除(pop)元素,这意味着只有最后被添加进栈的元素才能被访问和移除。

(1)基本操作

  • push: 向栈顶添加一个元素。
  • pop: 移除栈顶的元素。注意,pop操作不返回被移除的元素。
  • top: 访问栈顶的元素。
  • empty: 检查栈是否为空。
  • size: 返回栈中元素的数量。

(2)使用示例

#include <iostream>
#include <stack>
using namespace std;

int main() {
    stack<int> myStack;

    // 向栈中添加元素
    myStack.push(10);
    myStack.push(20);
    cout << "Top element: " << myStack.top() << endl; // 输出: 20

    // 移除栈顶元素
    myStack.pop();
    cout << "Top element after pop: " << myStack.top() << endl; // 输出: 10

    // 检查栈是否为空
    if (!myStack.empty()) {
        cout << "Stack is not empty" << endl;
    }
    return 0;
}

5.queue

queue是一种容器适配器,它提供了先进先出(FIFO, First In First Out)的数据结构模型。queue允许在队列的末尾添加新元素,并从队列的开头移除元素,这模拟了现实生活中队列的行为。

(1)基本操作

  • push(): 在队列的末尾添加一个元素。
  • pop(): 移除队列开头的元素。注意,pop操作不返回被移除的元素。
  • front(): 访问队列开头的元素。
  • back(): 访问队列末尾的元素。
  • empty(): 检查队列是否为空。
  • size(): 返回队列中元素的数量。

(2)使用示例

#include <iostream>
#include <queue>

int main() {
    queue<int> myQueue;

    myQueue.push(1);
    myQueue.push(2);
    myQueue.push(3);


    cout << "Front element: " << myQueue.front() << endl;  // 输出: 1
    cout << "Back element: " << myQueue.back() << endl;  // 输出: 3

    // 移除队列的第一个元素
    myQueue.pop();
    // 再次访问队列的第一个元素
    cout << "Front element after pop: " << myQueue.front() << endl;  // 输出: 2

    // 检查队列是否为空
    if (!myQueue.empty()) {
        cout << "Queue is not empty" << endl;
    }
    return 0;
}
  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSP-J1 知识点库是一种用于计算机科学基础知识的库,旨在帮助学生和专业人士深入了解计算机科学领域的各个方面。 在 CSP-J1 知识点库中,包含了许多重要的知识点,如编程语言、数据结构、算法、计算机网络、操作系统等。这些知识点涵盖了计算机科学的基础知识,是学习和理解计算机科学的基石。 首先,编程语言是计算机科学不可或缺的一部分。CSP-J1 知识点库中包含了各种编程语言的基本概念、语法和特性,如C、C++、Java、Python等。通过学习这些编程语言,人们可以掌握编程的基本原理和技巧,并能够进行程序开发和问题解决。 另外,数据结构和算法也是 CSP-J1 知识点库中的重要内容。数据结构是组织和管理数据的方式,而算法则是解决问题的步骤和方法。在 CSP-J1 知识点库中,人们可以学习到各种常见的数据结构和算法,如数组、链表、栈、队列、排序算法、查找算法等。熟悉这些数据结构和算法可以提高计算机程序的效率和性能,从而更好地解决实际问题。 此外,CSP-J1 知识点库还包括了计算机网络和操作系统等内容。计算机网络是指连接多台计算机和设备的网络系统,而操作系统则负责管理计算机硬件和软件资源。在 CSP-J1 知识点库中,人们可以学习到计算机网络的基本原理和协议,以及操作系统的功能和管理技术。这些知识可以帮助人们理解计算机的工作原理和网络通信的基本过程。 总之,CSP-J1 知识点库是一个集成了计算机科学基础知识的库,包含了编程语言、数据结构、算法、计算机网络、操作系统等多个方面的知识点。通过学习这些知识点,人们可以更好地理解和掌握计算机科学的原理和应用,提升自己在计算机科学领域的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值