水曜日, 10月 09, 2013

all of, any of, none of

リスト・配列要素検査の関数all_of,any_of,none_ofは是非覚えておくとよい.

#include <vector>
#include <string>
#include <iostream>
#include <algorithm>

using namespace std;

bool chk(string s) {
 return s.size() > 5;
}

int main() {

 vector<string> v;
 v.push_back("Warsaw");
 v.push_back("NewYork");

 // all of
 cout << ( all_of(v.begin(),v.end(),chk) ? "[GOOD] all good" : "some failed or all failed" ) << endl;
 v.push_back("Tokyo");
 cout << ( all_of(v.begin(),v.end(),chk) ? "[GOOD] all good" : "some failed or all failed" ) << endl;

 v.clear();
 v.push_back("Rome");
 v.push_back("Nagoya");

 // any of
 cout << ( any_of(v.begin(),v.end(),chk) ? "[GOOD] some good" : "all failed" ) << endl;
 v.erase( find( v.begin(),v.end(),"Nagoya"));
 v.push_back("Osaka");
 cout << ( any_of(v.begin(),v.end(),chk) ? "[GOOD] some good" : "all failed" ) << endl;

 // none of
 cout << ( none_of(v.begin(),v.end(),chk) ? "[GOOD] all failed" : "not all failed" ) << endl;
 v.erase(find(v.begin(),v.end(),"Osaka"));
 v.push_back("Mangalore");
 cout << ( none_of(v.begin(),v.end(),chk) ? "[GOOD] all failed" : "not all failed" ) << endl;

 return 0;

}


C++でforeach

ForeachはJavaやPythonといった他の言語で多用されている反復処理用構文である.
C++ではSTLのalgorithmがそれを提供してくれている.是非使おう.

#include <vector>
#include <string>
#include <iostream>
#include <algorithm>

using namespace std;

void show(const string s) {
 cout << s << ' ';
}

int main() {

 vector<string> v;
 v.push_back("Algonquin");
 v.push_back("Iroquois");

 for_each(v.begin(),v.end(),show);

 return 0;

}


lvalueとrvalue

C++のコンテクストでたまに見かける用語の一つがlvalueとrvalueである.
これを知らないと苦労することもあるかもしれないので是非覚えておいてほしい.

lvalue .. いわゆる変数・定数.2回以上使いまわされることもあるかもしれないデータである.
rvalue .. いわゆる代入される又は出現後即揮発するデータ.

int i = 100 * 3;

とあればiがlvalue, 100 * 3 がrvalueである.

インライン関数

Q. classの宣言中に関数を定義した場合,その関数はインライン扱いされるか?

A. yes