CSP-202203-1-未初始化警告
关键点总结:set
在C++中,
set
是一个基于平衡二叉树(通常是红黑树)的关联容器,它包含了一系列唯一的元素,并且这些元素会自动按照特定的排序准则进行排序。以下是set
中常用的一些内置函数及其用法:
-
insert()
:将新元素插入到set
中,如果该元素已存在,则操作不会改变set
。std::set<int> mySet; mySet.insert(10); // 插入元素
-
find()
:在set
中查找给定的元素。如果找到,则返回一个指向该元素的迭代器;如果未找到,则返回set::end()
。auto it = mySet.find(10); // 查找值为 10 的元素
-
erase()
:删除set
中的元素。这个函数可以通过给定的值删除元素,也可以通过给定的迭代器位置来删除元素。删除元素后,会返回删除操作后set
的大小或者是迭代器。mySet.erase(10); // 通过值删除元素 mySet.erase(mySet.begin()); // 通过迭代器位置删除元素
-
size()
:返回set
中元素的数量。size_t numElements = mySet.size(); // 获取元素数量
-
empty()
:检查set
是否为空(即是否包含元素)。bool isEmpty = mySet.empty(); // 检查set是否为空
-
clear()
:移除set
中的所有元素,使其变为空set
。mySet.clear(); // 清空set
-
count()
:返回某个元素在set
中的数量。由于set
中的元素都是唯一的,因此此函数只能返回 1(元素存在)或 0(元素不存在)。size_t count = mySet.count(10); // 检查值为 10 的元素是否存在
-
begin()
和end()
:返回指向set
中第一个元素和尾后元素的迭代器,通常用于范围迭代。for(auto it = mySet.begin(); it != mySet.end(); ++it) {std::cout << *it << " "; }
-
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是否被初始化或者为0inited.insert(left);}cout << inlegal;return 0;
}