zoukankan      html  css  js  c++  java
  • C++ copy 函数

      先看下面的一段代码:

       vector<int> u(10,100);
        vector<int> v;
        copy(u.begin(),u.end(),v.begin());
    
        for(vector<int>::iterator it=v.begin();it!=v.end();it++)
        {
            cout<<*it<<ends;
        }
    运行错误!

       功能很简单,把vector u复制给v,但运行异常。为什么?

       vector<int> v;定义时定义时没有分配空间,copy不成功。应改为vector<int> v(u.size());

         如果想使用vector<int> v;有两个方法可以实现同样的功能;

    方法一: 使用iterator适配器copy(u.begin(),u.end(),back_inserter(v)); 

                  back_insert;是iterator adapter: 有一个容器作为参数,并且生成一个迭代器,但这个迭代器被称用作目的地时,就会在容器末尾自动的添加元素。所以vector<int> v;不必定义大小。

    方法二:循环的用push_back来实现

    for(vector<int>::iterator it=u.begin();it!=u.end();it++)
         v.push_back(*it);

        好了,来看看copy函数正规说明。

    template<class InputIterator, class OutputIterator>
       OutputIterator copy(
          InputIterator _First, 
          InputIterator _Last, 
          OutputIterator _DestBeg
       );

    Assigns the values of elements from a source range to a destination range, iterating through the source sequence of elements and assigning them new positions in a forward direction.

     Parameters
    _First

    An input iterator addressing the position of the first element in the source range.

    _Last

    An input iterator addressing the position that is one past the final element in the source range.

    _DestBeg

    An output iterator addressing the position of the first element in the destination range.

    它使用返回值的:

    An output iterator addressing the position that is one past the final element in the destination range, that is, the iterator addresses _Result + (_Last – _First ). 返回指向最后一个元素的迭代器。Returns an iterator to the end of the destination range (which points to the element following the copy of last).

    函数功能类似这样:

    template<class InputIterator, class OutputIterator>
      OutputIterator copy ( InputIterator first, InputIterator last, OutputIterator result )
    {
      while (first!=last) *result++ = *first++;
      return result;
    }

    如果想要把一组元素从头到尾向目的地的前端复制,就要用copy_backware函数,用法一模一样,只不过第三个参数为

     BidirectionalIterator2 _DestEnd; 目的地的最后一个位置。

    Copies the elements in the range 
    [first,last) into a range whose end element is result. The function begins by copying *(last-1) into *(result-1), and then follows backwards by the elements preceeding these, until first is reached (and including it).
  • 相关阅读:
    CSS 兼容性调试技巧
    CSS 常用的兼容性调试技巧
    全局CSS设置
    CSS 盒子模型
    CSS表格属性
    HTML引入CSS的方法
    CSS 定位
    CSS display overflow 属性 cursor光标类型
    CSS 继承和优先级
    沟通表达
  • 原文地址:https://www.cnblogs.com/youxin/p/2452035.html
Copyright © 2011-2022 走看看