0

基本クラスShape、および他の派生クラス、、CircleおよびがSquareありTriangleます。3つの基本クラスポインタのベクトルを作成しました。

vector < Shape * > shapes( 3 );
shapes[ 0 ] = &C1; //Circle C1;
shapes[ 1 ] = &S1; //Square S1;
shapes[ 2 ] = &T1; //Triangle T1;

その後、仮想関数を呼び出すloopためにを使用しましたvirtualViaPointer()draw()

for (size_t i = 0; i < shapes.size(); ++i) {
    cout << endl;
    virtualViaPointer( shapes[ i ] );
}

void virtualViaPointer(const Shape * const baseClassPtr)
{
baseClassPtr->draw();
}

各派生クラスには、getArea()各形状の面積を計算して結果を返す関数があります。

vectorここで、上記を使用して関数を呼び出して、領域を並べ替えたいと思いgetArea()ます。どうやってやるの?たとえば、私の並べ替え関数は次のようになりますsortShape(Array, numShape)。ここで、は作成された形状を指すポインタArrayの配列です。Shape

どんな助けでも大歓迎です

4

2 に答える 2

3

std :: sortは、適切な比較関数とともに使用できます。

bool compareArea(const Shape* lhs, const Shape* rhs){
  return lhs->getArea() < rhs->getArea();
}

...

std::sort(shapes.begin(), shapes.end(), compareArea);
于 2012-07-23T09:47:12.573 に答える
1

ユーザー定義の並べ替え基準で並べ替えアルゴリズムを使用します。

std::sort(shapes.begin(), shapes.end(), [](Shape * lhs, Shape * rhs)
{
  return lhs->getArea() < rhs->getArea();
});
于 2012-07-23T09:46:43.900 に答える