博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++中的 Stl 算法(很乱别看)
阅读量:6535 次
发布时间:2019-06-24

本文共 7084 字,大约阅读时间需要 23 分钟。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 12 13 int main() 14 { 15 std::vector
vec{ 1, 2, 4, 6, 7, 8}; 16 17 //1.简单查找 18 19 //return iterator by value/unaryPred 20 //查找单值出现位置 21 std::cout<<*std::find(vec.begin(),vec.end(),2)<
vec_cm{ 4,4,4,5,6,7}; 59 std::cout<<*std::search(vec.begin(),vec.end(),vec_cm.begin(),vec_cm.end())<
::iterator,std::vector
::iterator> pair1= 80 std::mismatch(vec.begin(),vec.end(),vec_cm.begin()); 81 // std::pair
::iterator,std::vector
::iterator> pair2= 82 // std::mismatch(vec.begin(),vec.end(),vec_cm.begin(),[](int& a,int& b){}); 83 std::cout<<*pair1.first<<*pair1.second<
vec3_;115 vec3_.resize(vec.size());116 //按第一序列范围拷贝;117 std::copy(vec.begin(),vec.end(),vec3_.begin());118 //按谓词拷贝119 std::copy_if(vec.begin(),vec.end(),vec3_.begin(),[](int& value){ return value>2;});120 //按数量拷贝,返回尾元素121 std::copy_n(vec.begin(),vec.size(),vec.begin());122 123 124 125 //对元素调用std::move()移动126 std::move(vec.begin(),vec.end(),vec.begin());127 128 129 std::vector
vec4_;130 vec4_.resize(vec.size());131 // //对第一序列执行一元谓词拷贝到第二序列中132 // std::transform(vec.begin(),vec.end(),vec4_.begin(),[](int& value){return value>0;});133 //134 // //对2序列执行二元谓词放入第三序列135 std::vector
vec5_;136 // vec5_.resize(vec.size()+vec4_.size());137 // std::transform(vec.begin(),vec.end(),vec4_.begin(),vec5_.begin(),[](int& a,int& b){ return a==b;});138 139 140 141 //拷贝一个序列到另一个序列,与oldvalue比较相等的则在新序列中替换成新值142 std::replace_copy(vec.begin(),vec.end(),vec4_.begin(),2,3);143 144 //根据一元谓词条件判断那些值需要被替换成新值145 std::replace_copy_if(vec.begin(),vec.end(),vec4_.begin(),[](int& value){ return value>0;},20);146 147 148 //合并2序列到第三序列149 //默认降序,可自行设置二元谓词比较150 //前提:有序序列151 std::merge(vec.begin(),vec.end(),vec4_.begin(),vec4_.end(),vec5_.begin());152 std::merge(vec.begin(),vec.end(),vec4_.begin(),vec4_.end(),vec5_.begin(),[](int& a,int& b){ return a
vec8_{ 8,8,8,8};157 std::for_each(vec.begin(),vec.end(),[](int& value){std::cout<
<<"\t";});158 std::cout<
vec9_{ 1,2,3,4,5,6,7};176 177 std::replace(vec9_.begin(),vec9_.end(),3,100);178 std::cout<
<
sort_vec{ 1,2,3,4,5,6,7,8,9};192 193 for(auto& iter:sort_vec)std::cout<
<<"\t";194 //是否符合划分谓词条件,true在前false在后195 if(std::is_partitioned(sort_vec.begin(),sort_vec.end(),[](int& value){ return value%2==1;}))196 {197 std::cout<<"(Partition)"<
sort_array1,sort_array2;220 std::partition_copy(sort_vec.begin(),sort_vec.end(),sort_array1.begin(),sort_array2.begin(),[](int& value){ return value%2==0;});221 222 for(auto& iter:sort_array1)std::cout<
<<"\t";223 std::cout<
sort_array{ 1,2,3,4,5,6,324,34,13,213,31,32};233 //排序算法234 //std::stable_sort 稳定排序235 std::sort(sort_array.begin(),sort_array.end());236 //std::sort(sort_array.begin(),sort_array.end(),[](int& a,int& b){return a>=b;});237 238 239 if(std::is_sorted(sort_array.begin(),sort_array.end()))240 {241 std::cout<<"sort"<
sort_array{ 1,2,3,4,5,6,324,34,13,213,31,32};251 252 std::nth_element(sort_array.begin(),sort_array.begin()+4,sort_array.end());253 254 for(auto& iter:sort_array)std::cout<
<<"\t";255 256 257 258 259 260 261 //重排序列算法262 263 std::array
sort_array{ 1,2,3,4,5,6,324,34,13,213,31,32};264 //删除符合条件的,用保留的元素覆盖删除元素265 std::remove(sort_array.begin(),sort_array.end(),213);266 std::remove_if(sort_array.begin(),sort_array.end(),[](int& value){ return value%2==0;});267 //std::remove_copy(sort_array.begin(),sort_array.end(),dest,value);268 //std::remove_copy_if(sort_array.begin(),sort_array.end(),dest,comp);269 270 //序列相邻重复元素删除,通过覆盖删除271 //std::unique(beg,end);272 //std::unique(beg,end,binaryPred);273 //std::unique_copy(beg,end,dest)274 //std::unique_copy_if(beg,end,dest,binaryPred);275 276 for(auto& iter:sort_array)std::cout<
<<"\t";277 278 279 280 //截取序列,从某个元素到end之间的范围 截取到beg之前281 std::vector
vec18{ 1,2,3,4,5,6,7,8,9};282 283 std::rotate(vec18.begin(),vec18.begin()+3,vec18.end());284 //std::rotate_copy(beg,mid,end,dest);285 286 for(auto& iter:vec18)std::cout<
<<"\t";287 288 289 //翻转序列290 //std::reverse(beg,end);291 //std::reverse(beg,end,dest);292 293 294 295 296 297 //随机序列298 std::vector
random_vec{ 1, 2, 3, 4, 5, 6, 7, 8};299 300 unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();301 // std::random_shuffle(random_vec.begin(),random_vec.end());302 //std::random_shuffle(random_vec.begin(),random_vec.end(),[](int seed){return std::rand()%seed;});303 std::shuffle(random_vec.begin(), random_vec.end(), std::default_random_engine(seed));304 305 for (auto &iter:random_vec)std::cout << iter << "\t";306 307 308 309 //排列算法310 311 std::vector
vec1{ 1, 2, 3, 4, 5, 6};312 std::vector
vec2{ 1, 3, 4, 5, 2, 6};313 314 //2序列是否是1序列的排列,是返回true;315 //可以添加bianryPred选择排列方式316 if (std::is_permutation(vec1.begin(), vec1.end(), vec2.begin()))317 std::cout << "vec2 is_permutation belong vec1" << std::endl;318 319 320 //1 2 3321 //1 3 2322 //2 1 3323 //2 3 1324 //3 1 2325 //3 2 1326 //根据字典序列排序,默认降序排序,比如(1 2 3) ,首元素排列中1最小且第二个元素2小于排列(1 3 2),所以排列(1 2 3)在第一个,其他依次类推;327 std::vector
vec_permutation{ 2,3,1};328 do329 {330 std::cout<
<<" "<
<<" "<
<
v(10); // 0 0 0 0 0 0 0 0 0 0366 std::vector
::iterator it;367 368 std::sort (first,first+5); // 5 10 15 20 25369 std::sort (second,second+5); // 10 20 30 40 50370 371 it=std::set_union (first, first+5, second, second+5, v.begin());372 // 5 10 15 20 25 30 40 50 0 0373 v.resize(it-v.begin()); // 5 10 15 20 25 30 40 50374 375 std::cout << "The union has " << (v.size()) << " elements:\n";376 for (it=v.begin(); it!=v.end(); ++it)377 std::cout << ' ' << *it;378 std::cout << '\n';379 380 381 382 std::vector
int_vec1{ 1,2,3,4,5,6,7,8,9};383 std::vector
int_vec2{ 3,4,5};384 std::vector
int_vec;385 int_vec.resize(3);386 //寻找交集387 std::set_intersection(int_vec1.begin(),int_vec1.end(),int_vec2.begin(),int_vec2.end(),int_vec.begin());388 for(auto& iter:int_vec)std::cout<
<
int_vec1{ 1, 2, 3, 4, 5, 6, 7, 8, 9};394 std::vector
int_vec2{ 3, 4, 5};395 std::vector
int_vec(6);396 397 std::set_difference(int_vec1.begin(),int_vec1.end(),int_vec2.begin(),int_vec2.end(),int_vec.begin());398 399 for(auto& iter:int_vec)std::cout<
<
int_vec1{ 1, 2, 3, 4, 5, 6, 7, 8, 9};405 std::vector
int_vec2{ 3, 4, 5};406 std::vector
int_vec(12);407 408 auto end=std::set_symmetric_difference(int_vec1.begin(),int_vec1.end(),int_vec2.begin(),int_vec2.end(),int_vec.begin());409 int_vec.resize(end-int_vec.begin());410 411 412 for(auto& iter:int_vec)std::cout<
<
li{ 1,2,3,4,5,6,7,8};418 419 std::cout<
<
in_vec{ 1,23,4,5,6,7,8};427 428 std::cout<<*std::min_element(in_vec.begin(),in_vec.end())<
(),std::divides
());462 std::cout << '\n';463 464 std::cout << "using custom functions: ";465 std::cout << std::inner_product(series1,series1+3,series2,init,466 myaccumulator,myproduct);467 std::cout << '\n';468 469 470 471 //序列当前位置到beg范围求和.当前位置递增472 int array[]={ 1,2,3,4,5,6,7};473 int result[7]{ 0};474 std::partial_sum(array,array+7,result);475 for(auto& iter:result)std::cout<
<<"\t";476 std::cout<

 

转载于:https://www.cnblogs.com/xuaidongstdudyrecording/p/7255916.html

你可能感兴趣的文章