演算子のリロードとSTL
3619 ワード
演算子のリロードとは:
演算子のリロードとは、自分の必要に応じてc++が提供する演算子をリロードして新しい意味を与えることです.たとえば、複数の加算は、プラス記号を再ロードすることで実現できます.
演算子の再ロード方法:関数タイプoperator演算子名(パラメータ){演算子の処理}
「+」を再ロードして複数の加算を行います.
再ロード演算子のルール:
新しい演算子を定義することはできません.既存の演算子のみを再ロードできます.
再ロードできない演算子:. .* :: sizeof ?:
リロード演算子は、メンバー関数またはユーティリティー関数として定義できます.
演算子関数がクラスオブジェクトのメンバーにアクセスする必要がある場合は、友元関数として定義する必要があります.そうしないと、クラスのプライベートメンバーにアクセスできません.
再ロード入出力演算子:入力出力を再ロードする関数は、メンバー関数として定義できない友元関数としてのみ定義できます.
STL c++標準テンプレートライブラリ
STLはc++が定義した使いやすいクラスの集合で、自分で定義しなくてもいいので、とても便利です.
STLは主に容器,反復器,アルゴリズムからなる.コンテナはクラスオブジェクトデータを格納するために使用され、反復器はコンテナ内ですべてのクラスオブジェクトデータを遍歴して必要な位置を見つけるために使用され、アルゴリズムはデータを操作して必要な機能を実現するために使用されます.
今よく使われているのはvector容器とmap/mul'timap容器です
vector:
map/multimap
演算子のリロードとは、自分の必要に応じて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には便利で実用的な関数がたくさんあります.プログラムで呼び出すことで、仕事を簡素化し、効率を高めることができます.