在 C++ 中迭代集合的不同方法
集合是一种关联容器,其中每个元素都必须是唯一的,因为元素的值标识了它。这些值按特定顺序存储。
句法:
set
Here,
Datatype: Set can take any data type depending on the values, e.g. int, char, float, etc.
本文重点讨论可用于在 C++ 中迭代集合的所有方法。本文将讨论以下方法:
- 使用迭代器迭代一个集合。
- 使用reverse_iterator反向迭代一个集合。
- 使用基于范围的 for 循环遍历一个集合。
- 使用for_each 循环遍历一个集合。
让我们开始详细讨论这些方法。
使用迭代器迭代集合。
在此方法中,使用begin()函数创建并初始化迭代器itr ,该函数将指向第一个元素,每次迭代后,itr 指向集合中的下一个元素,它将继续迭代直到到达集。
在此方法中将使用以下方法:
- begin() :返回指向集合中第一个元素的迭代器。
- end() :返回一个迭代器,指向集合中最后一个元素之后的理论元素。
下面是实现上述方法的 C++ 程序:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to display elements
// of a set
void display(set s)
{
set::iterator itr;
// Displaying set elements
for (itr = s.begin();
itr != s.end(); itr++)
{
cout << *itr << " ";
}
}
// Driver code
int main()
{
// Empty set container
set s;
// Insert elements in random order
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// Invoking function display()
// to display elements of set
display(s);
return 0;
}
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to display elements
// of the set
void display(set s)
{
set::reverse_iterator itr;
// Displaying elements of the
// set
for (itr = s.rbegin();
itr != s.rend(); itr++)
{
cout << *itr << " ";
}
}
// Driver code
int main()
{
// Empty set container
set s;
// Insert elements in random order
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// Invoking display() function
display(s);
return 0;
}
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to display elements
// of the set
void display(set s)
{
// Printing the elements of
// the set
for (auto itr : s)
{
cout << itr << " ";
}
}
// Driver code
int main()
{
// Empty set container
set s;
// Insert elements in random order
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// Invoking display() function
display(s);
return 0;
}
C++
// C++ program to implement
// the above approach
#include
using namespace std;
void print(int x)
{
cout << x << " ";
}
// Function to display the
// elements of set
void display(set s)
{
for_each(s.begin(), s.end(),
print);
}
// Driver code
int main()
{
// Empty set container
set s;
// Insert elements in random order
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// Invoking display() function
display(s);
return 0;
}
输出:
10 20 30 40 50
使用 reverse_iterator 反向迭代一个集合
在这种方法中,使用rbegin()函数创建和初始化reverse_iterator itr ,该函数将指向集合中的最后一个元素,并且在每次迭代之后,itr 指向集合中向后方向的下一个元素,它将继续迭代直到它到达集合的开头。
在这种方法中使用了以下函数:
- set::rbegin():它是 C++ STL 中的内置函数,它返回指向容器中最后一个元素的反向迭代器。
- set::rend():它是 C++ STL 中的一个内置函数,它返回一个反向迭代器,指向集合容器中第一个元素之前的理论元素。
下面是实现上述方法的 C++ 程序:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to display elements
// of the set
void display(set s)
{
set::reverse_iterator itr;
// Displaying elements of the
// set
for (itr = s.rbegin();
itr != s.rend(); itr++)
{
cout << *itr << " ";
}
}
// Driver code
int main()
{
// Empty set container
set s;
// Insert elements in random order
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// Invoking display() function
display(s);
return 0;
}
输出:
50 40 30 20 10
使用基于范围的 for 循环遍历集合
在这种方法中,基于范围的 for 循环将用于向前迭代集合中的所有元素。
句法:
for ( range_declaration : range_expression )
loop_statement
Parameters :
range_declaration :
A declaration of a named variable, whose type is the type of the element of the sequence represented by range_expression, or a reference to that type. Often uses the auto specifier for automatic type deduction.
range_expression:
Any expression that represents a suitable sequence or a braced-init-list.
loop_statement:
Any statement, typically a compound statement, which is the body of the loop.
下面是实现上述方法的 C++ 程序:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to display elements
// of the set
void display(set s)
{
// Printing the elements of
// the set
for (auto itr : s)
{
cout << itr << " ";
}
}
// Driver code
int main()
{
// Empty set container
set s;
// Insert elements in random order
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// Invoking display() function
display(s);
return 0;
}
输出:
10 20 30 40 50
使用 for_each 循环遍历集合
在这种方法中,for_each 循环接受一个在每个容器元素上执行的函数。
句法:
for_each (InputIterator start_iter, InputIterator last_iter, Function fnc)
start_iter: The beginning position from where function operations has to be executed.
last_iter: The ending position till where function has to be executed.
fnc/obj_fnc: The 3rd argument is a function or an object function which operation would be applied to each element.
下面是实现上述方法的 C++ 程序:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
void print(int x)
{
cout << x << " ";
}
// Function to display the
// elements of set
void display(set s)
{
for_each(s.begin(), s.end(),
print);
}
// Driver code
int main()
{
// Empty set container
set s;
// Insert elements in random order
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// Invoking display() function
display(s);
return 0;
}
输出:
10 20 30 40 50