配列の要素数を増やすには?[C++]
中央値を探すプログラムで困っています。中央値の算出の仕方自体はわかるのですが
途中で配列の値を増やさないといけないのでてこずっています。
int main( ) {
Median m;
double d[5]= {3,4,5,10,12};
m.addValue( 1 );
m.addValue( 2 );
m.addArray( d, 5 );
cout << “Median = “ << m.computeMedian( ) << endl;
m.clear( );
}
このプログラムを実行したら Median = 4 とでるようにしないといけないんですが、
addValue()とaddArray()をどう書けばいいのかわかりません。
m.addValue(1)と(2)で1と2を配列の中に足してそこから中央値を算出し
ないといけないんですが要素数を後から増やすことはできるんでしょうか?
ちなみにヘッダーは下の通りで、privateの部分は自由に変えても結構です。
お手数ですが力をお貸しください。
public:
Median( );
void addValue( double d );
void addArray( double d[], int size );
void clear();
double computeMedian( ) const;
private:
double my_Values[ MAXSIZE ];
int number;
回答(3件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.3ベストアンサー20pt
#include <iostream.h>
class Median {
public:
Median(){
size = 5;
my_Values = new double[size];
pos =-1;
}
Median(const Median& x){
size=x.size;
my_Values = new double[size];
pos = x.pos;
for(int i=0;i<pos;i++)
my_Values[i]=x.my_Values[i];
}
Median& operator=(const Median& x){
if(&x != this){
delete[] my_Values;
size = x.size;
my_Values = new double[size];
for(int i=0;i<pos;i++)
my_Values[i]=x.my_Values[i];
}
return (*this);
}
void extend(void){
Median tmp = *this;
delete [] my_Values;
size+=5;
my_Values = new double[size];
for(int i=0;i<tmp.pos;i++)
my_Values[i]=tmp.my_Values[i];
}
void addValue( double d ){
if(pos==size){
extend();
}
my_Values[++pos]=d;
}
void addArray( double d[], int size ){
if(this->size<=pos+size){
extend();
}
for(int i=0;i<size;i++)
my_Values[++pos]=d[i];
}
void clear(){
delete[] my_Values;
pos = -1;
size = 5;
my_Values = new double[size];
}
double computeMedian(void) const {
return(my_Values[pos / 2]);//でたらめ
}
private:
double *my_Values;
int number;
int pos;
int size;
};
int main(void) {
Median m;
double d[5]= {3,4,5,10,12};
m.addValue( 1 );
m.addValue( 2 );
m.addArray( d, 5 );
cout << "Median = " << m.computeMedian( ) << endl;
m.clear( );
}
この回答へのお礼
またまたご親切に回答していただきありがとうございます。
これを参考にして自分でも書いてみます。
No.2ベストアンサー10pt
#include <iostream>
#include <vector>
#include <algorithm>
class Median {
std::vector<double> data;
public:
void addValue(double d) { data.insert(std::lower_bound(data.begin(), data.end(), d), d); }
void addArray(double d[], int size ) { for ( int i = 0; i < size; ++i ) addValue(d[i]); }
void clear() { data.clear(); }
double computeMedian( ) const { return (data.size() % 2) ? data[(data.size()-1)/2] : (data[data.size()/2-1]+data[data.size()/2])/2; }
};
int main() {
Median m;
double d[5]= {3,4,5,10,12};
m.addValue( 1 );
m.addValue( 2 );
m.addArray( d, 5 );
std::cout << "Median = " << m.computeMedian() << std::endl;
m.clear( );
return 0;
}
この回答へのお礼
これがvectorというものなんですね。
回答ありがとうございます。
配列の動的確保もできるでしょうけども、
全部自分でやらないといけないので面倒です。
vector<double>を使ってはどうですか?
この回答へのお礼
回答どうもありがとうございます。
vectorはまだ使えるレベルではないので
動的確保でがんばってみます。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











