我正在寻找几行C++/STL代码的实用和教育样本.我最喜欢的是:
清空一个释放其保留内存的向量:
vector <...>().swap (v)
Run Code Online (Sandbox Code Playgroud)
(临时交换)
将地图复制到矢量:
map<T1, T2> myMap;
vector< pair<T1, T2> > myVec(myMap.begin(), myMap.end());
// or
myVec.assign(myMap.begin(), myMap.end());
Run Code Online (Sandbox Code Playgroud)自定义,非增强分割:
vector<string> &mysplit(const string &s, char delim, vector<string> &elems) {
stringstream ss(s);
string item;
while(getline(ss, item, delim)) { elems.push_back(item); }
return elems;
}
Run Code Online (Sandbox Code Playgroud)Mar*_*ork 13
我最喜欢的是将容器复制到输出:并将输入流复制到容器中.
#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
int main()
{
std::vector<int> data;
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(data)
);
std::copy(data.begin(),data.end(),
std::ostream_iterator<int>(std::cout,"\n")
);
}
Run Code Online (Sandbox Code Playgroud)
实际删除由remove()or 删除的元素需要以下习语remove_if():
vector<int> v;
...
v.erase(remove(v.begin(), v.end(), 42), v.end());
Run Code Online (Sandbox Code Playgroud)
remove()然后remove_if()向前滑动未删除的元素并报告新范围结束的位置 - 它们不会(也不能)删除它们,因为它们可以在任意迭代器范围内工作,而不仅仅是容器.
// std::back_inserter usage ( std::inserter for map )
std::copy( source.begin(), source.end(), std::back_inserter( container ) );
Run Code Online (Sandbox Code Playgroud)
-
// mem_fun and bind usage (but boost better)
std::some_algorithm(..., std::mem_fun( func ) );
Run Code Online (Sandbox Code Playgroud)
没那么有用,但功能强大:
检查是容器分类
std::adjacent_find( container.begin(), container.end(), greater<Container::value_type>() ) == container.end()
Run Code Online (Sandbox Code Playgroud)
也是你和dirkgently提到的例子.
| 归档时间: |
|
| 查看次数: |
2814 次 |
| 最近记录: |