2016-03-27 17 views
-2

私は、特定の範囲(例えば:1000,10000など)のシャッフル整数の複数のファイル(例えば100)を生成しようとしています。これは私が今まで試したコードです与えられた範囲のシャッフルされた整数の複数のファイルを生成するC++

// random_shuffle example 
#include <iostream>  // std::cout 
#include <algorithm> // std::random_shuffle 
#include <vector>  // std::vector 
#include <ctime>  // std::time 
#include <cstdlib>  // std::rand, std::srand 
#include <fstream> 

// random generator function: 
int myrandom (int i) { return std::rand()%i;} 

int main(){ 
    std::srand (unsigned (std::time(0))); 
    std::vector<int> myvector2; 
// For creating 10 different shuffled files 
    for(int j=0;j<10;j++){ 
// set some values: 
     for (int i=1; i<=10000; ++i) myvector2.push_back(i); 

// using built-in random generator: 
     std::random_shuffle (myvector2.begin(), myvector2.end()); 

// using myrandom: 
     std::random_shuffle (myvector2.begin(), myvector2.end(), myrandom); 

// print out content: 
     std::cout << "Data Shuffled:"; 
// put content in out file 
     std::ofstream f2("out.txt"); 
     for (std::vector<int>::iterator it=myvector2.begin(); it!=myvector2.end(); ++it) 
     f2<< *it <<'\n'; 
    } 
return 0; 
} 

ファイル 'out.txt'は上書きされ、私はただ1つのファイルで終わります。各ファイルに異なるシャッフル整数のセットを持つ複数のファイルを作成するにはどうすればよいですか?

は、あなたが同じファイル名の各時間のstd :: ofstreamのF2( "out.txtを")を使用している

+0

ファイルに乱数を書き込んでいても問題ありませんか?そうでない場合は、問題の中核に近づくためにコードを減らす必要があります。また、他の人がそれを受け取りコンパイルできるように、コードを完成させてください。それをフォーマットして、他の人がそれを読んで理解できるようにしてください。それが立てば、あなたの質問は話題にはなりません。 @UlrichEckhardt。 –

+0

私の質問がなぜ話題になっているのか理解できますか? –

+0

@NivethaMahalakshmi「[最小限の、完全で検証可能なサンプルの作成方法(http://stackoverflow.com/help/mcve)」のヘルプセクションを参照してください。 – pjs

答えて

0

のためにこの形式jを得ることができます教育的な例を提供する、これはおそらく私はそれにアプローチする方法です。

コメントはインラインです。このコードでは、いくつかのC++ 14の機能を使用しています。

操作全体が標準アルゴリズムの観点から表現されていることに注意してください。これは、コードを移植性、メンテナンス性、修正性に優れたものにする最適な方法であり、最適化のための最適な機会をコンパイラに提供します。

#include<random> 
#include<fstream> 
#include<vector> 
#include<utility> 
#include<iterator> 
#include<algorithm> 

// generate a vector of all integers in the set Is... 
template<int...Is> 
auto initial_vector(std::integer_sequence<int, Is...>) 
{ 
    return std::vector<int>({ Is... }); 
} 

// defering to template expansion function allows the compiler to populate the vector from a compile-time 
// computed data table. Totally unnecessary, but I find it pleasing. 
auto initial_vector() 
{ 
    return initial_vector(std::make_integer_sequence<int, 10000>()); 
} 

int main() 
{ 
    auto eng = std::default_random_engine(std::random_device{}()); 

    // make our initial vector 
    auto data = initial_vector(); 

    // for each data set... 
    for (int i = 0 ; i < 100 ; ++i) 
    { 
     // shuffe the data... 
     std::shuffle(std::begin(data), std::end(data), eng); 

     // create a filename from th index of the data set 
     auto strm = std::ofstream("data" + std::to_string(i) + ".txt"); 

     // copy the data-set to the file, encoded as newline-delimited strings representing decimal integers 
     std::copy(std::begin(data), std::end(data), std::ostream_iterator<int>(strm, "\n")); 
    } 
} 
+1

これは本当に役に立ちます。ありがとうございました。 –

0

ありがとうございました。

out1.text例えばたびに別の名前を使用しようと、out2.txt、...

あなたはforループ

std::ostringstream stringStream; 
stringStream << "out"<<j<<".txt"; 
std::string fileName= stringStream.str(); 
関連する問題