次の完全なプログラムは、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;
.
これは単に右中かっこが欠落していることが原因ですが、動作中のバージョンからコードをコピーして貼り付けることで回避できたはずです。
それはまた、はるかに少ない作業です。:-)