演算子のリロードとSTL

3619 ワード

演算子のリロードとは:
演算子のリロードとは、自分の必要に応じてc++が提供する演算子をリロードして新しい意味を与えることです.たとえば、複数の加算は、プラス記号を再ロードすることで実現できます.
演算子の再ロード方法:関数タイプoperator演算子名(パラメータ){演算子の処理}
「+」を再ロードして複数の加算を行います.
Complex operator+(Complex &c2)          //          
    {
        Complex c;
        c.real=real+c2.real;
        c.imag=imag+c2.imag;
        return c;

    }

再ロード演算子のルール:
新しい演算子を定義することはできません.既存の演算子のみを再ロードできます.
再ロードできない演算子:.     .*   ::     sizeof     ?:     
リロード演算子は、メンバー関数またはユーティリティー関数として定義できます.
演算子関数がクラスオブジェクトのメンバーにアクセスする必要がある場合は、友元関数として定義する必要があります.そうしないと、クラスのプライベートメンバーにアクセスできません.
class Complex
{
private:
    double real,imag;
public:
    Complex(){real=0;imag=0;}
    Complex(double r,double i){real=r;imag=i;}
    friend Complex operator+(Complex &c1,Complex &c2);           //           
};
Complex operator+(Complex &c1,Complex &c2)
{
    return Complex(c1.real+c2.real,c1.imag+c2.imag);

}

再ロード入出力演算子:入力出力を再ロードする関数は、メンバー関数として定義できない友元関数としてのみ定義できます.
class Complex

{
private:     .............
public:      .............
    friend ostream &operator<
まとめ:演算子のリロードはc++で非常に使いやすい.演算子のリロードは自己定義関数で実現され、演算子のリロードによって+-*/><
STL c++標準テンプレートライブラリ
STLはc++が定義した使いやすいクラスの集合で、自分で定義しなくてもいいので、とても便利です.
STLは主に容器,反復器,アルゴリズムからなる.コンテナはクラスオブジェクトデータを格納するために使用され、反復器はコンテナ内ですべてのクラスオブジェクトデータを遍歴して必要な位置を見つけるために使用され、アルゴリズムはデータを操作して必要な機能を実現するために使用されます.
今よく使われているのはvector容器とmap/mul'timap容器です
vector:
int main(){
    vector a;  //    vector
    for (int i = 0; i < 5; ++i){
        a.push_back(5 - i);   //                   
    }
    cout << "Size: " << a.size() << endl;    //       
    a.pop_back();//                  
    a[0] = 1;

    cout << "Size: " << a.size() << endl;     //       
    for (int i = 0; i < (int)a.size(); ++i){   //       
        cout << a[i] << ", " << endl;
    }
    cout << endl;

    sort(a.begin(), a.end());     //                    
    cout << "Size: " << a.size() << endl;
    for (int i = 0; i < (int)a.size(); ++i){
        cout << a[i] << ", " << endl;
    }
    cout << endl;

    a.clear();   //          
    cout << "Size: " << a.size() << endl;
    return 0;
}

map/multimap
int main(){
    multimap mm1;  //    multimap
    multimap::iterator mm1i, p1, p2;
    mm1.insert(make_pair("b", 3));  //    
    mm1.insert(make_pair("a", 0));
    mm1.insert(make_pair("b", 5));
    mm1.insert(make_pair("c", 4));
    mm1.insert(make_pair("b", 2));
    cout << "Size: " << mm1.size() << endl;   //       
    for(mm1i = mm1.begin(); mm1i != mm1.end(); mm1i++){    //                     
        cout << mm1i->first << ": " << mm1i->second << endl;
    }

    cout << "COUNT: " << mm1.count("b") << endl;     //      b      
    cout << "Bound: " << endl;
    p1 = mm1.lower_bound("b");    //        b      
    p2 = mm1.upper_bound("b");    //      b      
    for(mm1i = p1; mm1i != p2; mm1i++){
        cout << mm1i->first << ": " << mm1i->second << endl;
    }

    return 0;
}
まとめ:STLは非常に使いやすいツールで、STLには便利で実用的な関数がたくさんあります.プログラムで呼び出すことで、仕事を簡素化し、効率を高めることができます.