【CSP试题回顾】202203-1-未初始化警告

本文详细介绍了C++中set容器的基本操作,包括插入、查找、删除、计数以及范围迭代,同时强调了在使用过程中对未初始化元素的检查,以防止非法操作。
摘要由CSDN通过智能技术生成

CSP-202203-1-未初始化警告

关键点总结:set

在C++中,set 是一个基于平衡二叉树(通常是红黑树)的关联容器,它包含了一系列唯一的元素,并且这些元素会自动按照特定的排序准则进行排序。以下是 set 中常用的一些内置函数及其用法:

  1. insert():将新元素插入到 set 中,如果该元素已存在,则操作不会改变 set

    std::set<int> mySet;
    mySet.insert(10); // 插入元素
    
  2. find():在 set 中查找给定的元素。如果找到,则返回一个指向该元素的迭代器;如果未找到,则返回 set::end()

    auto it = mySet.find(10); // 查找值为 10 的元素
    
  3. erase():删除 set 中的元素。这个函数可以通过给定的值删除元素,也可以通过给定的迭代器位置来删除元素。删除元素后,会返回删除操作后 set 的大小或者是迭代器。

    mySet.erase(10); // 通过值删除元素
    mySet.erase(mySet.begin()); // 通过迭代器位置删除元素
    
  4. size():返回 set 中元素的数量。

    size_t numElements = mySet.size(); // 获取元素数量
    
  5. empty():检查 set 是否为空(即是否包含元素)。

    bool isEmpty = mySet.empty(); // 检查set是否为空
    
  6. clear():移除 set 中的所有元素,使其变为空 set

    mySet.clear(); // 清空set
    
  7. count():返回某个元素在 set 中的数量。由于 set 中的元素都是唯一的,因此此函数只能返回 1(元素存在)或 0(元素不存在)。

    size_t count = mySet.count(10); // 检查值为 10 的元素是否存在
    
  8. begin()end():返回指向 set 中第一个元素和尾后元素的迭代器,通常用于范围迭代。

    for(auto it = mySet.begin(); it != mySet.end(); ++it) {
        std::cout << *it << " ";
    }
    
  9. lower_bound()upper_bound():返回一个迭代器,分别指向不小于(大于或等于)和大于特定值的第一个元素。如果这样的元素不存在,则返回 set::end()

    auto lb = mySet.lower_bound(10); // 大于或等于 10 的第一个元素
    auto ub = mySet.upper_bound(10); // 大于 10 的第一个元素
    

完整代码

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

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n, k, inlegal = 0;
    cin >> n >> k;

    set<int>inited; // 被初始化的变量

    // 输入赋值语句
    for (int i = 0; i < k; i++)
    {
        int left, right;
        cin >> left >> right;
        
        if (!(inited.count(right) || right == 0)) inlegal++; // 检查right是否被初始化或者为0

        inited.insert(left);
    }
    cout << inlegal;

    return 0;
}

请添加图片描述

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值