Lon*_*ong 3 c++ swap iterator metaprogramming c++11
从David Abrahams和Aleksey Gurtovoy的书"C++ Template Metaprogramming"中我了解到iter_swap(见下文)会比std::swap有时慢得多.虽然这本书有一些解释,但我并没有得到它,有人可以通过更多细节解释其背后的原因.
template <typename ForwardIt1>
void iter_swap(ForwardIt1 it1, ForwardIt1 it2){
typedef typename std::iterator_traits<ForwardIt1>::value_type T;
T tmp = *it1;
*it1 = *it2;
*it2 = tmp;
}
template <typename ForwardIt1>
void swap_wrapper(ForwardIt1 it1, ForwardIt1 it2){
std::swap(*it1, *it2);
}
Run Code Online (Sandbox Code Playgroud)
通过应用它们std::list<std::vector<std::string>>::iterator,我发现第一个比第二个慢10倍,即使矢量的大小(其元素都是小字符串,长度小于10)仅为10.
你iter_swap()常常是次优的,如果"作品"的说法,而不是完全错误.
std::iter_swap()委托swap()使用参数依赖查找是有原因的:
挑选定制的实现.
此外,回退std::swap()在交换时利用了移动语义,可能消除了您没有使用的昂贵的资源获取.
当然,两者都与琐碎的类型无关.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |