0
点赞
收藏
分享

微信扫一扫

2024.3.11 C++作业

米小格儿 03-12 19:30 阅读 2

目录

一、介绍

二、使用

 头文件

例子

(1)定义

 (2)添加元素

(3)insert插入元素

(4)遍历

(5)查找

三、参数

四、迭代器

问题:什么是迭代器

五、推广


一、介绍

        简单的说:set<int>用于存储一组唯一且有序的整数值

        详细的说:set<int> 是 C++ 标准库中的容器,它表示一种集合(Set)数据结构,用于存储一组唯一且有序的整数值。在一个 set 中,每个元素都是唯一的,而且它们是按照一定的顺序进行排列的。当你将一个元素插入到 set 中时,如果该元素已经存在,则插入操作会被忽略,因为 set 中不允许存在重复的元素。这使得 set 成为一个非常有用的工具,用来管理一组唯一的数据,并且可以自动帮你去除重复项。

        除了插入元素,set 还支持查找、删除和遍历等操作,而且这些操作的时间复杂度通常是较低的,对于维护一组唯一值非常高效。

二、使用

 头文件

#include <set>

 #include<bits/stdc++.h>也是包含的

例子

(1)定义

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
    set<int> myset;
    return 0;
}

 (2)添加元素

mySet = {4, 1, 3, 2, 5};

(3)insert插入元素

   myset.insert 是 C++ 中 std::set 容器提供的成员函数,用于向 set 容器中插入新的元素。具体来说,insert 函数会将一个新的元素插入到 set 中,并且确保集合中不包含重复的元素。

        当调用 myset.insert(value) 时,如果 value 在 set 中已经存在,则插入操作会被忽略,因为 set 中不能包含重复的元素。如果 value 是一个新的元素,它将被插入到 set 中,并且 set 会自动维持元素的有序性。

        这个函数返回一个 std::pair 对象,其中的第一个成员是一个迭代器,指向插入的位置,第二个成员是一个布尔值,表示插入是否成功。通常情况下,可以忽略 insert 返回的值,因为主要关心插入操作是否成功。

(4)遍历

#include <iostream>
#include <set>

int main() {
    std::set<int> mySet = {4, 1, 3, 2, 5};

    // 使用迭代器遍历 set
    for (auto it = mySet.begin(); it != mySet.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

(5)查找

#include <iostream>
#include <set>

int main() {
    std::set<int> mySet = {1, 2, 3, 4, 5};

    // 查找元素是否存在
    int elementToFind = 3;
    auto it = mySet.find(elementToFind);

    if (it != mySet.end()) {
        std::cout << "元素 " << elementToFind << " 存在于 set 中" << std::endl;
    } else {
        std::cout << "元素 " << elementToFind << " 不存在于 set 中" << std::endl;
    }

    return 0;
}

三、参数

集合s的长度:s.size();

集合s开始的地址:s.begin();

集合s结束的地址:s.end()。

基本操作:

定义集合s:set<int>s;

定义集合数组s[N]:set<int>s[N];

在集合s中查找元素i:s.find(i),返回i的地址,且*s.find(i)==i;若s中不含i,则s.find(i)==s.end(),这即是说,你可以利用s.find(i)!=s.end()判断元素是否在集合内;

其它操作:

清除s的所有元素:s.clear();

检查集合是否为空:s.empty()==true,集合为空;

删除集合中地址为it的元素:s.erase(it)。

四、迭代器

#include <iostream>
#include <set>

int main() {
    std::set<int> mySet = {4, 1, 3, 2, 5};

    std::set<int>::iterator it = mySet.begin();
    std::advance(it, 2); // 将迭代器移动到第三个元素位置

    // 输出第三个元素
    std::cout << "第三个元素是: " << *it << std::endl;

    return 0;
}

        在 C++ 中,可以通过迭代器来访问 std::set 中的元素。你可以定义一个迭代器来遍历 set 中的元素,然后使用迭代器来访问特定位置的元素。 

        定义了一个迭代器 it,并将其初始化为 mySet 的起始位置(即第一个元素)。然后,使用 std::advance 函数将迭代器移动到第三个元素的位置。最后,通过解引用迭代器 *it 来获取第三个元素的值并输出。

        通过使用迭代器,你可以方便地访问 std::set 中的任意位置的元素。

问题:什么是迭代器

        迭代器(Iterator)是一种抽象的数据访问工具,它允许你在容器(如数组、列表、集合等)中按顺序访问元素,而无需了解容器的内部实现细节。迭代器提供了一种统一的方式来遍历和操作容器中的元素,使得代码更加灵活和可复用。

迭代器通常具有以下几个基本操作:

  1. 解引用 (Dereferencing):迭代器可以通过解引用操作符 `*` 来获取当前位置的元素值。
  2. 自增 (Incrementing):迭代器可以通过自增操作符 `++` 移动到容器中的下一个元素位置。
  3.  比较 (Comparing):迭代器可以通过比较操作符 `==` 和 `!=` 来进行相等性比较,判断两个迭代器是否指向同一个位置。

        通过使用迭代器,你可以遍历容器中的每个元素,并对其进行读取或修改。这样,你不需要关心容器的内部实现方式,只需要使用迭代器提供的接口来操作元素即可。

        在C++中,不同类型的容器提供了不同类型的迭代器。例如,`std::vector` 提供了随机访问迭代器,`std::list` 提供了双向迭代器,`std::set` 提供了双向迭代器等。每种容器都定义了适合自身特性的迭代器类型。

        通过迭代器,你可以灵活地操作容器中的元素,实现各种需求,如查找特定元素、插入或删除元素、遍历元素并进行处理等。迭代器是 C++ 标准库中非常重要和强大的一个概念。

博文推荐:http://t.csdnimg.cn/nXmt3

五、推广

       std::set 容器在 C++ 中可以存储任何可比较的数据类型,不仅限于 int 类型。你可以存储诸如 chardoublestring、自定义结构体、甚至自定义类对象等类型的数据。

#include <iostream>
#include <set>
#include <string>

int main() {
    std::set<std::string> stringSet = {"apple", "banana", "orange", "apple"};

    // 遍历 set 中的字符串
    for (const auto& str : stringSet) {
        std::cout << str << " ";
    }
    std::cout << std::endl;

    return 0;
}

在这个示例中创建了一个 std::set<std::string> 的实例 stringSet,并存储了一些字符串。然后使用范围-based for 循环遍历并输出 stringSet 中的所有字符串。

举报

相关推荐

9.14 C++作业

C++作业5

12.11 C++ 作业

c++课程作业

11.29 C++ 作业

C++作业 8 - 6

0 条评论