copy_back使用

#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;

template <class T>
struct display{
 void operator()(const T& x){
  cout<<x<<" ";
 }
};

int main(){
 
 {
  int a[] = {0,1,2,3,4,5,6,7,8};
  copy_backward(a+2,a+7,a+9);//輸出區間的終點與輸入區間位置重疊
  for_each(a,a+9,display<int>());//2,3,4,5,6,5,6,7,8
  cout<<endl;
 }

 {
  int a[] = {0,1,2,3,4,5,6,7,8};
  copy_backward(a+2,a+7,a+5);//輸出區間的起點與輸入區間重合,可能會有問題,本例結果正確,copy算法使用memmove()執行復制操作
  for_each(a,a+9,display<int>());//0 1 2 3 2 3 4 5 6
  cout<<endl;
 }

 {
  int a[] = {0,1,2,3,4,5,6,7,8};
  deque<int> d (a,a+9);

  deque<int>::iterator first = d.begin();
  deque<int>::iterator last = d.end();

  advance(first,2);//a+2
  cout<<*first<<endl;//2

  advance(last,-2);//a+7
  cout<<*last<<endl;

  deque<int>::iterator result = d.end();

  copy_backward(first, last, result);
  for_each(d.begin(),d.end(),display<int>());//2 3 4 5 6 5 6 7 8
  cout<<endl;
 }

 {
  int a[] = {0,1,2,3,4,5,6,7,8};
  deque<int> d (a,a+9);

  deque<int>::iterator first = d.begin();
  deque<int>::iterator last = d.end();

  advance(first,2);//a+2
  //++++first;
  cout<<*first<<endl;//2

  advance(last,-2);//a+7
  //----last;
  cout<<*last<<endl;

  deque<int>::iterator result = d.begin();
  advance(result,5);//a+4
  cout<<*result<<endl;

  //輸出區間的起點與輸入區間重合,可能會有問題
  copy_backward(first,last,result);
  for_each(d.begin(),d.end(),display<int>());//0 1 2 3 2 3 2 3 2,本例結果錯誤,不再使用memmove()執行實際複製操作
  cout<<endl;
 }

 return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章