📜  在 C++ 中迭代集合的不同方法

📅  最后修改于: 2022-05-13 01:54:53.490000             🧑  作者: Mango

在 C++ 中迭代集合的不同方法

集合是一种关联容器,其中每个元素都必须是唯一的,因为元素的值标识了它。这些值按特定顺序存储。

句法:

本文重点讨论可用于在 C++ 中迭代集合的所有方法。本文将讨论以下方法:

  1. 使用迭代器迭代一个集合
  2. 使用reverse_iterator反向迭代一个集合
  3. 使用基于范围的 for 循环遍历一个集合
  4. 使用for_each 循环遍历一个集合

让我们开始详细讨论这些方法。

使用迭代器迭代集合。

在此方法中,使用begin()函数创建并初始化迭代器itr ,该函数将指向第一个元素,每次迭代后,itr 指向集合中的下一个元素,它将继续迭代直到到达集。
在此方法中将使用以下方法:

  1. begin() 返回指向集合中第一个元素的迭代器。
  2. 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;
}


输出:

使用 reverse_iterator 反向迭代一个集合

在这种方法中,使用rbegin()函数创建和初始化reverse_iterator itr ,该函数将指向集合中的最后一个元素,并且在每次迭代之后,itr 指向集合中向后方向的下一个元素,它将继续迭代直到它到达集合的开头。
在这种方法中使用了以下函数:

  1. set::rbegin():它是 C++ STL 中的内置函数,它返回指向容器中最后一个元素的反向迭代器。
  2. 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;
}

输出:

使用基于范围的 for 循环遍历集合

在这种方法中,基于范围的 for 循环将用于向前迭代集合中的所有元素。

句法:

下面是实现上述方法的 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;
}

输出:

使用 for_each 循环遍历集合

在这种方法中,for_each 循环接受一个在每个容器元素上执行的函数。

句法:

下面是实现上述方法的 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;
}

输出: