本文介绍一下set
的不同初始化方法。
基本用法
在初始化 set
之前,首先需要包含 <set>
头文件,并使用 std::set
命名空间。
特点和注意事项
- 初始化方法多样:可以使用默认构造函数、初始化列表、范围初始化、复制构造函数、移动构造函数等方法来初始化
set
。
- 自动排序:插入元素时会自动排序。
- 唯一性:
set
不允许有重复的元素。
- 高效性:查找、插入和删除操作的时间复杂度均为 O(log n)。
示例代码
1. 默认构造函数
创建一个空的 set
,并根据需要插入元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <set> #include <iostream>
int main() { std::set<int> s; s.insert(10); s.insert(5); s.insert(20);
for (const auto& elem : s) { std::cout << elem << " "; } return 0; }
|
2. 使用初始化列表
直接在声明时初始化 set
。
1 2 3 4 5 6 7 8 9 10
| #include <set> #include <iostream>
int main() { std::set<int> s = {10, 5, 20, 5}; for (const auto& elem : s) { std::cout << elem << " "; } return 0; }
|
3. 使用范围(区间)初始化
可以使用另一个容器的元素范围来初始化 set
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include <set> #include <vector> #include <iostream>
int main() { std::vector<int> vec = {10, 5, 20, 15, 10}; std::set<int> s(vec.begin(), vec.end());
std::cout << "Elements in set initialized from vector: "; for (const auto& elem : s) { std::cout << elem << " "; } std::cout << std::endl;
return 0; }
|
4. 复制构造函数
可以使用已有的 set
来初始化新的 set
。
1 2 3 4 5 6 7 8 9 10 11 12
| #include <set> #include <iostream>
int main() { std::set<int> s1 = {10, 5, 20}; std::set<int> s2(s1);
for (const auto& elem : s2) { std::cout << elem << " "; } return 0; }
|
5. 移动构造函数
可以使用已有的 set
来移动初始化新的 set
。
1 2 3 4 5 6 7 8 9 10 11 12
| #include <set> #include <iostream>
int main() { std::set<int> s1 = {10, 5, 20}; std::set<int> s2(std::move(s1));
for (const auto& elem : s2) { std::cout << elem << " "; } return 0; }
|
总结
C++ 提供了多种方法来初始化 set
,从默认构造函数到使用初始化列表、范围初始化、复制构造函数和移动构造函数等。选择合适的初始化方法可以使代码更加简洁和高效。了解这些初始化方法有助于在实际编程中根据具体需求灵活地创建和初始化 set
。
使用 vector
初始化 set
是一种方便的方法,可以将 vector
中的元素快速插入到 set
中,并自动去重和排序。这种方法特别适用于需要从其他容器转换为 set
的情况。理解这些初始化方法可以帮助更有效地利用 set
容器。