Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 迭代std容器(C+;+;)中的所有元素对_C++_Stl_Iterator - Fatal编程技术网

C++ 迭代std容器(C+;+;)中的所有元素对

C++ 迭代std容器(C+;+;)中的所有元素对,c++,stl,iterator,C++,Stl,Iterator,迭代std容器中所有元素对的最佳方法是什么,如std::list,std::set,std::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; for(int i=0;i

迭代std容器中所有元素对的最佳方法是什么,如
std::list
std::set
std::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;
for(int i=0;icout只需遍历,就可以使用常量迭代器。如果要修改值,请使用迭代器

例如:

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++;
}
typedef std::vector IntVec;
IntVec-vec;
// ...
IntVec::const_迭代器iter_cur=vec.begin();
IntVec::const_迭代器iter_end=vec.end();
while(iter\u cur!=iter\u end){
int val=*iter\u cur;
//在这里和瓦尔做点什么
iter_cur++;
}

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

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

auto
不是当前标准的一部分。没错,这里是懒惰。添加了评论。实际上,可能需要使用TAD。
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;
    }
  }
}