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()
函数可以分别获取第一个元素和最后一个元素的下一个位置的迭代器。在使用迭代器时,需要使用*
运算符将迭代器指针解引用,即可获取迭代器指针所指向的元素内容。