`
kmplayer
  • 浏览: 512418 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通用算法笔记1

阅读更多
1,设计STL的目标就是对于几乎每个任务都使用预定义的算法,代替手工编码的工作.
例1:
#include <algorithm>
#include <cassert>
#include <cstddef>
using namespace std;
#if 0
1,copy的用法.
#endif

int main()
{
  int a[] = { 10, 20, 30 };
  const size_t SIZE = sizeof(a)/sizeof(a[0]);
  int b[SIZE];
  copy(a, a + SIZE, b);//**********
  for(size_t i = 0; i < SIZE; ++i)
    assert(a[i] == b[i]);
}

例2:
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <string>
using namespace std;

#if 0
equal的用法:仅当第1个序列的每一个元素与第2个序列的对应元素相等时,返回true.
#endif

int main()
{
  string a[] = {"read", "my", "lips"};
  const size_t SIZE = sizeof a / sizeof a[0];
  string b[SIZE];
  copy(a, a + SIZE, b);
  assert(equal(a, a + SIZE, b));//**********
}


例3:
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <iterator>
#include <vector>
using namespace std;

#if 0
back_inserter()插入迭代器
#endif

int main()
{
  int a[] = { 10, 20, 30 };
  const size_t SIZE = sizeof a / sizeof a[0];
  vector<int> v1(a, a + SIZE);
  vector<int> v2;
  copy(v1.begin(), v1.end(), back_inserter(v2)); //*************
  assert(equal(v1.begin(), v1.end(), v2.begin()));
}

总结,copy的实现:
template<typename Iterator>
void copy(Iterator begin, Iterator end, Iterator dest)
{
    while(begin != end)
        *dest++ = *begin++;
}



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics