[C++] 学習ノート: C++ を学ぶのに 21 日間 第 15 章から第 22 章のハイライト

STL シーケンシャルコンテナ

std::vector std::deque
std::list 
std::forward_list

STL連想コンテナ

std::set std::unordered_set 
std::map std::unordered_map 
std::multiset std::unordered_multiset
std::multimap std::unordered_multimap

STLコンテナアダプター

std::stack std::queue std::priority_queue

STL文字列クラス

std::string std::wstring
for(auto charLocator = stlString.cbegin();charLocator !=stlString.end();++charLocator){}

std::文字列検索

while(subStr!=string::npos)
{
// Make find() search forward from the next character onwards
size_t searchOffset = subStrPos + 1;
subStrPos = sampleStr.find(“ ”,searchOffset);
}

std::文字列の反転

reverse(sampleStr.begin(),sampleStr.end());

大文字と小文字の変換

transform(inStr.begin().inStr.end(),inStr.begin(),::toupper);
transform(inStr.begin().inStr.end(),inStr.begin(),::tolower);

C++14 std::string の演算子 ""

ポインター構文を使用してベクター内の要素にアクセスする

vector<int>::const_iterator element =   integers.cbegin();
auto  element = integers.cbegin();

std::vector サイズ vec.size(); 容量 vec.capacity(); 割り当て容量 vec.reserve(num);
std::deque は Vector に似ていますが、push_front() と Pop_front()
std::list の反転をサポートします。 list.reverse() ソート list.sort()
std::forward_list 要素を挿入する場合は、push_front() のみを使用できます。挿入には、insert() を使用することもできます。

STL セットとマルチセットは並べ替え基準を指定します

// used as a template parameter in set / multiset instantiation
template <typename T>
struct SortDescending
{
	bool operator()(const T& lhs, const T& rhs) const
	{
	 return (lhs>rhs);
	}
}
set <int, SortDescending<int>> setInts;
multisets <int, SortDescending<int>> msetInts;

Tips: 对于其对象储存在set或multiset等容器中的类,别忘了在其中实现运算符<和==,分别用于排序和查找。

STL std::map および std::multimap のインスタンス化

#include <map>
using namespace std;
...
map<keyType, valueType, Predicate = std::less<keyType>> mapObj;
multimap <keyType, valueType, Predicate = std::less<keyType>> mmapObj;

要素を挿入

insert(make_pair(key, value));
insert(pair<keyType, valueType>(key, value));

マルチマップ内の要素を検索する

auto pairFound = mmapIntToStr.find(key);

// check if find() succeeded;
if(pairFound != mmapIntToStr.end())
{
	// Find the number of pairs that have the same supplied key
	size_t numPairInMap = mmapIntToStr.count(key);

	for(size_t count = 0 ;count < numPairInMap;++count)
	{
	cout << “Key:” << pairFound->first ;
	cout << “, Value [” << counter << “] = ”;
	cout << pairFound->second << endl;
	
	++ pairFound;
	}
}
else
	cout << “Element not found in the multimap”;

基于散列表的STL键值对容器std::unordered_map, 其平均插入和删除时间固定,查找元素的时间也是固定的。

散列函数hash_function();load_factor()指出了unordered_map桶的填满程度。因插入元素导致load_factor()超过max_load_factor()时,unordered_map将重新组织以增加桶数,并重建散列表。

状態を保存する関数オブジェクト

template<typename elementType>
struct DisplayElementKeepCount
{
	int count;
	DisplayElementKeepCount():count(0) {}
	void operator()(const elementType& elelment)
	{
	++count;
	cout << element << ‘ ’;
	}
};

ラムダ式の一般的な構文

[stateVar1, stateVar2](Type1& var1, Type2& var2){// lambda code here;}

ラムダ式の状態変数を変更するには

[stateVar1, stateVar2](Type& param) mutable {// lambda code here;}

変更が外部的にまだ有効である場合

[&stateVar1, &stateVar2](Type& param) {// lambda code here;}

戻り値の型を明示的に指定するには

[stateVar1, stateVar2](Type var1, Type var2) -> ReturnType
{return (value or expression);}

複合文の場合

[stateVar1, stateVar2](Type var1, Type var2) -> ReturnType
{
	Statement 1;
	Statement 2;
	return (value or expression);
}

すべてのローカル変数を渡すには

[=](Type& Param, ...){... expression;}

キャプチャ リストを介して状態変数を受け入れるラムダ式インスタンス

[divisor](int dividend){return (dividend%divisor) == 0;}

おすすめ

転載: blog.csdn.net/weixin_56917387/article/details/125793857