迭代std-containers中的所有元素对(C ++)

时间:2009-12-01 08:50:13

标签: c++ stl iterator

迭代std容器中所有元素对的最佳方法是什么,例如std::liststd::setstd::vector等?

基本上要做相同的事情,但是使用迭代器:

for (int i = 0; i < A.size()-1; i++)
    for(int j = i+1; j < A.size(); j++)
        cout << A[i] << A[j] << endl;

2 个答案:

答案 0 :(得分:13)

最简单的方法是直接重写代码:

for (auto i = foo.begin(); i != foo.end(); ++i) {
  for (auto j = i; ++j != foo.end(); /**/) {
     std::cout << *i << *j << std::endl;
  }
}

auto替换为C ++ 98/03的const_iterator。或者把它放在自己的功能中:

template<typename It>
void for_each_pair(It begin, It end) {
  for (It  i = begin; i != end; ++i) {
    for (It j = i; ++j != end; /**/) {
       std::cout << *i << *j << std::endl;
    }
  }
}

答案 1 :(得分:1)

只是遍历,使用const_iterators。如果要修改值,请使用迭代器。

示例:

typedef std::vector<int> IntVec;

IntVec vec;

// ...

IntVec::const_iterator iter_cur = vec.begin();
IntVec::const_iterator iter_end = vec.end();
while (iter_cur != iter_end) {
    int val = *iter_cur;
    // Do stuff with val here
    iter_cur++;
}