C++ Primer 学习中。

简单记录下我的学习过程 (代码为主)

全部容器适用

unique(b,e)

unique(b,e,p)

unique_copy(b1,e1,b2)

unique_copy(b1,e1,b2,p)

注意:

    1、没有unique_if()

    2、没有unique_copy_if()



/**------http://blog.csdn.net/u010579068------**/
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<algorithm>
using namespace std; /*****************************************
//全部容器适用
unique(b,e)
unique(b,e,p)
unique_copy(b1,e1,b2)
unique_copy(b1,e1,b2,p)
注意:
1、没有unique_if()
2、没有unique_copy_if()
*****************************************/
/**----------------------------------------------------------------------------------
使用方法:删除连续的、反复的元素
----------------------------------------------------------------------------------**/
/*************************************************************************************
std::unique 全部排序容器适用 algorithm
--------------------------------------------------------------------------------------
template <class ForwardIterator>
ForwardIterator unique ( ForwardIterator first, ForwardIterator last ); template <class ForwardIterator, class BinaryPredicate>
ForwardIterator unique ( ForwardIterator first, ForwardIterator last,
BinaryPredicate pred );
//eg:
template <class ForwardIterator>
ForwardIterator unique ( ForwardIterator first, ForwardIterator last )
{
ForwardIterator result=first;
while (++first != last)
{
if (!(*result == *first)) // or: if (!pred(*result,*first)) for the pred version
*(++result)=*first;
}
return ++result;
}
*************************************************************************************/ /*************************************************************************************
std::unique_copy 全部排序容器适用 algorithm
--------------------------------------------------------------------------------------
template <class InputIterator, class OutputIterator>
OutputIterator unique_copy ( InputIterator first, InputIterator last,
OutputIterator result ); template <class InputIterator, class OutputIterator, class BinaryPredicate>
OutputIterator unique_copy ( InputIterator first, InputIterator last,
OutputIterator result, BinaryPredicate pred );
//eg:
template <class InputIterator, class OutputIterator>
OutputIterator unique_copy ( InputIterator first, InputIterator last,
OutputIterator result )
{
typename std::iterator_traits<InputIterator>::value_type value = *first;
*result=*first;
while (++first != last)
{
if (!(value == *first)) // or: if (!pred(value,*first)) for the pred version
*(++result) = value = *first;
}
return ++result;
}
*************************************************************************************/ bool myfunction (int i, int j)
{
return (i==j);
}
template<typename T>
void Print(T& V)
{
typename T::iterator iter=V.begin();
while(iter != V.end())
{
cout<<*iter++<<" ";
}
cout<<endl;
}
int main()
{
int myints[] = {10,20,20,20,30,30,20,20,10}; // 10 20 20 20 30 30 20 20 10
vector<int> myvector (myints,myints+9);
vector<int>::iterator it,pend; // using default comparison:
it = unique (myvector.begin(), myvector.end()); // 10 20 30 20 10 ? ? ? ?
// ^ myvector.resize( it - myvector.begin() ); // 10 20 30 20 10 // using predicate comparison:
unique (myvector.begin(), myvector.end(), myfunction); // (no changes) // print out content:
cout << "myvector contains:";
for (it=myvector.begin(); it!=myvector.end(); ++it)
cout << " " << *it;
cout << endl; vector<int> vec;
copy(myints,myints+9,back_inserter(vec));
Print(vec);
pend =unique(vec.begin(),vec.end(),greater<int>());//取单调不递减数列
cout << "vec contains:";
for (it=vec.begin(); it!=pend; ++it)
cout << " " << *it;
cout << endl << endl;
/**--------------------------------------------------------------------------------**/ // int myints[] = {10,20,20,20,30,30,20,20,10};
deque<int> mydeque (9); // 0 0 0 0 0 0 0 0 0
deque<int>::iterator id; // using default comparison:
id=unique_copy (myints,myints+9,mydeque.begin()); // 10 20 30 20 10 0 0 0 0
// ^ sort (mydeque.begin(),id); // 10 10 20 20 30 0 0 0 0
// ^ // using predicate comparison:
id=unique_copy (mydeque.begin(), id, mydeque.begin(), myfunction);
// 10 20 30 20 30 0 0 0 0
// ^ mydeque.resize( id - mydeque.begin() ); // 10 20 30 // print out content:
cout << "mydeque contains:";
for (id=mydeque.begin(); id!=mydeque.end(); ++id)
cout << " " << *id; cout << endl; return 0;
}

最新文章

  1. 使用CoreProfiler/NanoProfiler实现跨平台&amp;应用的整合性能调试
  2. VMware10.06精简版安装后台运行
  3. cas+shiro实现不时时的去请求cas进行身份验证
  4. 第9章 用内核对象进行线程同步(2)_可等待计时器(WaitableTimer)
  5. 【BZOJ 3143】【Hnoi2013】游走 期望+高斯消元
  6. [转]Linux进程间通信——使用信号
  7. nyoj-----42一笔画问题
  8. hdu 2645 find the nearest station
  9. (转载)MySQL中执行sql语句反斜杠需要进行转义否则会被吃掉
  10. uva 748 Exponentiation 浮点数乘方运算 高精度水题
  11. 解题报告 HDU1176 免费馅饼
  12. 打印NSLog分类 Foundation+Log.m
  13. 声明式编程思想和EEPlat
  14. quick-cocos2d-x游戏开发【3】——display.newSprite创建向导
  15. jquery性能优化的38个建议
  16. TPS,并发用户数,吞吐量以及一些计算公式
  17. (转)JavaWeb学习之Servlet(四)----ServletConfig获取配置信息、ServletContext的应用
  18. mysql 原理 ~ 事务隔离机制
  19. API - .after
  20. XML——Schema

热门文章

  1. Scrapy 框架介绍
  2. CSUOJ 1555 Inversion Sequence
  3. 洛谷 P1914 小书童——密码
  4. linux杂谈(十八):DNSserver的配置(一)
  5. eclispe中如何创建web项目
  6. 操作excel脚本练习
  7. Gym 100952 C. Palindrome Again !!
  8. 【Django】认证系统
  9. Centos安装FastDFS+Nginx(一天时间搞定)
  10. error c2572重定义默认參数