0

比較を行うために、whileループの外側で並べ替えられた数値を使用するにはどうすればよいですか。チェックしたので、whileの外側をベクトル化するのは前に定義したものと同じです。

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;
}
4

1 に答える 1

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() ) );
}

メインコードはあなたのコードと同じです (コピーして貼り付け、ほんの少し編集してデータを追加しただけです)。

では、コードが機能するとすれば、正確には何が問題なのでしょうか?


EDITwhile : OP は、別のコード、ループではなくdoループ、呼び出しの順序を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;
}

必要なヘッダーとusing namespace std;.

これは単に右中かっこが欠落していることが原因ですが、動作中のバージョンからコードをコピーして貼り付けることで回避できたはずです。

それはまた、はるかに少ない作業です。:-)

于 2012-12-16T21:01:54.577 に答える