やりたいこと↓
・10th0.in,10th1.in(1行目に要素数n,2からn行目に数値の書かれたファイル)をファイル入力で受取後,昇順にソートしてファイル出力で1行ごとに数値を記載し出力
・範囲外参照に対し例外を生成
・デストラクタにより記憶域が開放されていることをdeleteをなくすなどして確認
・配列の大きさはnの値を読み取った後に要素の数に応じて変えられるものとする
途中まで書いたソースファイル↓
c++
1#include <cmath> 2#include <functional> 3#include <iostream> 4#include <stdexcept> 5#include <string> 6#include <limits> 7using namespace std; 8 9class mArray { 10 double* pd; // 記憶域へのポインタ 11 int cs; // 現在の見かけの配列長さ 12 int max; // 最大の配列長さ 13public: 14 mArray()//最小限のコンストラクタ.指定されない時呼び出される. 15 { 16 max = 2; 17 pd = new double[max]; 18 cs = 0; 19 } 20 mArray(int max):max{max}//引数付きのコンストラクタ 21 { 22 this->max; 23 pd = new double[max]; 24 cs = 0; 25 } 26 27 mArray& operator<<(double a){ 28 // 引数を配列へ格納,必要なら拡張するコードを記載 29 // 最大長さは 2 倍 + 1ずつ増やしていくと効率が良い. 30 // 配列を大きくする時,以前の記憶域は削除する 31 // ただし,削除する前に新しい記憶域へ値をコピーする. 32 double* pt; 33 if(cs >= max){ 34 max = max*2 + 1; 35 pt = new double[max]; 36 for(int i=0;i<cs;++i){ 37 pt[i] = pd[i]; 38 } 39 delete [] pd; 40 pd = pt; 41 } 42 43 pt[cs] = a; 44 cs++; 45 46 return *this; 47 } 48 double& operator[](int i){ 49 // i >= cs ならば例外を送信するコードを記載 50 if(i >= cs){ 51 try{ 52 throw "Exception\n"; 53 } 54 55 catch(int a){ 56 } 57 } 58 return pd[i]; 59 } 60 61 int size(){ 62 // 配列長を返す. 63 return 0; // ここを変更 64 } 65 66 ~mArray(){ 67 delete [] pd; // 記憶域を開放 68 } 69}; 70 71int main() 72{ 73 ifstream ifs("10th0.in"); 74 if(!ifs) return 1; 75 76 int n; 77 ifs >> n; 78 79 { 80 mArray aB; 81 } 82 for(int i=0;i< 2000000; ++i){ 83 mArray aC; 84 mArray aB(16); 85 } 86 string s; 87 cout <<"type something to continue...\n"; 88 cin >> s; 89 return 0; 90}
配列長のところが分からないのと,昇順にするやり方が分からないです.
ヒントでも些細なことでもなんでもいいので回答もらえると嬉しいですm(; ;)m
たくさんの回答ありがとうございました!!!
最終的に皆さんの回答を参考にこのように書きました↓
c++
1#include <iostream> 2#include <string> 3#include<fstream> 4#include<array> 5#include<algorithm> 6#include<vector> 7using namespace std; 8 9int main(){ 10 std::ifstream ifs("10th0.in"); 11 if(!ifs) return 1; 12 std::size_t n; 13 14 ifs >> n; 15 std::vector<int> input(n); 16 for(auto&& e : input)ifs >> e; 17 std::sort(begin(input),end(input)); 18 std::ofstream ofs{"10th0.out"}; 19 for(auto e : input)ofs << e << '\n'; 20 21 return 0; 22 23}
回答3件
あなたの回答
tips
プレビュー