使用next_permutation访问置换值

时间:2012-12-16 20:39:51

标签: c++

如何在循环之外使用置换数字来进行比较。因为我已经检查过,向外的向量与之前定义的相同。

void display(vector<int> vec){
    for (int i=0; i<vec.size();i++){
        cout<<vec[i];
    }
}
int main()
{
  vector <int> vec;
  vec.push_back(3);
  vec.push_back(2);
  vec.push_back(1);
  vec.push_back(4);
  sort(vec.begin(), vec.end());
  while (next_permutation( vec.begin(), vec.end() )){
  display(vec);
  cout<<endl;
}

1 个答案:

答案 0 :(得分:1)

以下完整程序适用于Visual C ++和g ++:

#include <algorithm>
#include <vector>
#include <iostream>
#include <utility>
using namespace std;

template< class Item >
wostream& operator<<( wostream& stream, vector<Item> const& v )
{
    stream << "[";
    for( auto p = v.begin(); p != v.end();  ++p )
    {
        if( p != v.begin() ) { wcout << ", "; }
        wcout << *p;
    }
    stream << "]";
    return stream;
}

int main()
{
    int const   data[]  = {1, 2, 3, 4};
    vector <int> vec( begin( data ), end( data ) ); 
    sort(vec.begin(),vec.end());
    do
    {
        wcout << vec << endl; 
    } while (next_permutation( vec.begin(), vec.end() ) );
}

主代码与您的代码完全相同(它被复制和粘贴,只是编辑了一小部分来添加数据)。

所以,鉴于代码有效,究竟是什么问题?


编辑:OP现在使用不同的代码更新了问题,while循环而不是do循环,以及调用{{1}的顺序}}和next_permutation已更改,因此无法显示原始排列。

给出新代码,

display
即使在添加必需的标题和void display(vector<int> vec){ for (int i=0; i<vec.size();i++){ cout<<vec[i]; } } int main() { vector <int> vec; vec.push_back(3); vec.push_back(2); vec.push_back(1); vec.push_back(4); sort(vec.begin(), vec.end()); while (next_permutation( vec.begin(), vec.end() )){ display(vec); cout<<endl; } 之后

也无法编译。

虽然这只是由于缺少右支撑,但是通过从工作版本中复制和粘贴代码可以避免这种情况。

这项工作要少得多。 : - )