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::string 查找
while(subStr!=string::npos)
{
// Make find() search forward from the next character onwards
size_t searchOffset = subStrPos + 1;
subStrPos = sampleStr.find(“ ”,searchOffset);
}
std::string反转
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 的oprator"" s
使用指针语法访问vector中的元素
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 set与multiset指定排序标准
// 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));
multimap中查找元素
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 << ‘ ’;
}
};
lambda表达式的通用语法
[stateVar1, stateVar2](Type1& var1, Type2& var2){// lambda code here;}
若要在lambda表达式中修改状态变量
[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;}
通过捕获列表接受状态变量的lambda表达式实例
[divisor](int dividend){return (dividend%divisor) == 0;}