c++ - 遍历 std::set 中包含的所有三重不同值?

标签 c++ iterator c++03 c++98 stdset

假设我有一个没有重复值的排序 vector 。如果我想遍历所有不同值的三元组,我会这样做:

for(std::size_t i = 0; i < data.size(); ++i)
  for(std::size_t j = i+1; j < data.size(); ++j)
    for(std::size_t k = j+1; k < data.size(); ++k)
      do_somthing_with(data[i],data[j],data[k]);

如果我的容器是 std::set,我该如何使用迭代器做到这一点?

注意:出于兼容性原因,我不使用 C++11。

最佳答案

你可以做与 vector 几乎相同的事情,但你需要创建一个包装函数,它将复制和递增集合迭代器:

std::set<int>::const_iterator next_iterator(std::set<int>::const_iterator it)
{
  return ++it; // it has been passed by value, so already copied
}

//...

for (std::set<int>::const_iterator it = data.begin(); it != data.end(); ++it)
  for(std::set<int>::const_iterator jt = next_iterator(it); jt != data.end(); ++jt)
    for(std::set<int>::const_iterator kt = next_iterator(jt); kt != data.end(); ++kt)
       // ...

关于c++ - 遍历 std::set 中包含的所有三重不同值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52039573/

相关文章:

c++ - C++ 编译器是否对 lambda 闭包执行编译时优化?

java - 迭代器缺少实现的功能(java)

java - 在Java MapReduce中,Reducer的可迭代值似乎不一致

c++ - 将现有 C++ 项目导入 Xcode IDE

C++ map 比较器

c++ - 我可以规定模板类成员仅为 C++03 的原始类型吗?

c++ - 使用 enable_if 推导模板函数参数 - 对指针的引用

c++ - 如何对对象执行深拷贝?你如何制作复制构造函数?

c++返回类型具有当前类类型的指针

c++ - C++ 中的迭代器