C++ STL中的multiset begin()和end()函数
在C++的STL中,multiset容器是一种允许有重复元素的有序容器。它类似于set容器,但不同的是它可以存储相等的元素。本文将介绍multiset容器中的begin()和end()函数,以及它们的用法和示例。
multiset容器
在介绍multiset容器中的begin()和end()函数之前,我们先来了解一下multiset容器。
声明一个multiset容器
在声明一个multiset容器时,需要包含头文件#include <set>和命名空间using namespace std;。声明multiset容器的语法如下:
multiset<data_type,compare_function> set_name;
其中,data_type为容器中元素的数据类型,compare_function为一个可选的比较函数,默认情况下是使用less函数进行比较。set_name为multiset容器的名称。
下面是一个声明一个multiset容器代码示例:
#include <set>
#include <iostream>
using namespace std;
int main()
{
// 声明一个int类型的multiset容器,元素从小到大排序
multiset<int> my_set;
my_set.insert(5);
my_set.insert(3);
my_set.insert(7);
my_set.insert(3);
my_set.insert(8);
for(auto i:my_set)
{
cout << i << " ";
}
//输出结果:3 3 5 7 8
return 0;
}
multiset容器的迭代器
multiset容器的迭代器是指向容器中元素的指针。multiset容器中的元素是有序的,因此multiset容器的迭代器是随机访问迭代器。可以使用begin()和end()函数获取迭代器的指针。
begin()函数
begin()函数返回指向multiset容器中第一个元素的迭代器,如果容器为空,则返回尾后迭代器。begin()函数的语法如下:
auto itr = set_name.begin();
其中itr为multiset容器中第一个元素的迭代器。
下面是一个使用begin()函数的示例代码:
#include <set>
#include <iostream>
using namespace std;
int main()
{
// 声明一个int类型的multiset容器
multiset<int, greater<int> > my_set = {4,2,9,3,8,5};
for(auto itr = my_set.begin(); itr != my_set.end(); itr++)
{
cout << *itr << " ";
}
return 0;
}
输出结果为:9 8 5 4 3 2。
在上述代码中,我们声明了一个multiset容器my_set,包含了一组未排序的整数。使用greater<int>指定以降序方式进行排序。在for循环中使用begin()函数获取my_set的第一个元素的迭代器,并使用end()函数获取迭代器的末尾指针,通过循环输出所有元素。
需要注意的是,在使用迭代器时,需要使用*运算符将迭代器指针解引用,即可获取迭代器指针所指向的元素内容。
end()函数
end()函数返回指向multiset容器中最后一个元素的下一个迭代器。在C++中,迭代器指针通常从0开始,即第一个元素的下一个位置。end()函数的语法如下:
auto itr = set_name.end();
其中itr为multiset容器中最后一个元素的下一个迭代器。
下面是一个使用end()函数的示例代码:
#include <set>
#include <iostream>
using namespace std;
int main()
{
// 声明一个int类型的multiset容器
multiset<int> my_set = {2,5,7,3,5,8};
auto itr_start = my_set.begin(); // 获取第一个元素的迭代器
auto itr_end = my_set.end(); // 获取最后一个元素的下一个位置的迭代器
for(auto itr = itr_start; itr != itr_end; itr++)
{
cout << *itr << " ";
}
return 0;
}
输出结果为:2 3 5 5 7 8。
在上述代码中,我们声明了一个multiset容器my_set,包含了一组未排序的整数。使用begin()函数获取my_set的第一个元素的迭代器,并使用end()函数获取迭代器的末尾指针,在循环中遍历容器中的所有元素,并输出它们的内容。
示例代码
下面是一个综合使用multiset容器、begin()函数和end()函数的代码示例:
#include <set>
#include <iostream>
using namespace std;
int main()
{
// 声明一个int类型的multiset容器
multiset<int> my_set = {10, 20, 30, 20, 40, 50, 20};
// 使用begin()和end()函数循环遍历所有元素
for (auto itr = my_set.begin(); itr != my_set.end(); itr++)
cout << *itr << " ";
cout << endl;
// 使用begin()函数获取第一个元素
auto itr_start = my_set.begin();
cout << "The first element is: " << *itr_start << endl;
// 使用end()函数获取最后一个元素
auto itr_end = my_set.end();
itr_end--;
cout << "The last element is: " << *itr_end << endl;
return 0;
}
输出结果为:
10 20 20 20 30 40 50
The first element is: 10
The last element is: 50
在示例代码中,我们首先声明了一个multiset容器my_set,包含了一组整数。使用begin()和end()函数循环遍历所有元素,并输出它们的内容。然后,使用begin()函数获取第一个元素,并使用end()函数获取最后一个元素,并输出它们的内容。
结论
multiset容器中的begin()和end()函数可以分别获取第一个元素和最后一个元素的下一个位置的迭代器。在使用迭代器时,需要使用*运算符将迭代器指针解引用,即可获取迭代器指针所指向的元素内容。
极客笔记