zoukankan      html  css  js  c++  java
  • 实战c++中的vector系列--构造、operator=和assign差别

    vector或许是实际过程中使用最多的stl容器。看似简单,事实上有非常多技巧和陷阱。

    着重看一看vector的构造,临时依照C++11:

    default (1) 
    explicit vector (const allocator_type& alloc = allocator_type());
    
    fill (2)    
    explicit vector (size_type n);
             vector (size_type n, const value_type& val,
                     const allocator_type& alloc = allocator_type());
    
    range (3)   
    template <class InputIterator>
      vector (InputIterator first, InputIterator last,
              const allocator_type& alloc = allocator_type());
    
    copy (4)    
    vector (const vector& x);
    vector (const vector& x, const allocator_type& alloc);
    
    move (5)    
    vector (vector&& x);
    vector (vector&& x, const allocator_type& alloc);
    
    initializer list (6)    
    vector (initializer_list<value_type> il,
           const allocator_type& alloc = allocator_type());

    直接看看以下的代码,就知道怎样构造一个vector了:

    #include <iostream>
    #include <vector>
    
    int main ()
    {
    
      std::vector<int> first;                                // default (1) 
      std::vector<int> second (4,100);                       // fill (2)
      std::vector<int> third (second.begin(),second.end());  // range (3)
      std::vector<int> fourth (third);                       // a copy of third
    
      // the iterator constructor can also be used to construct from arrays:
      int myints[] = {16,2,77,29};
      std::vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );
    
      std::cout << "The contents of fifth are:";
      for (std::vector<int>::iterator it = fifth.begin(); it != fifth.end(); ++it)
        std::cout << ' ' << *it;
      std::cout << '
    ';
    
      return 0;
    }

    ===========================================================
    vector重载了=运算符,也有一个叫assign的方法,并且有什么差别吗?

    std::vector::operator=
    直接代码:

    #include <iostream>
    #include <vector>
    
    int main ()
    {
      std::vector<int> foo (3,0);
      std::vector<int> bar (5,0);
    
      bar = foo;
      foo = std::vector<int>();
    
      std::cout << "Size of foo: " << int(foo.size()) << '
    ';
      std::cout << "Size of bar: " << int(bar.size()) << '
    ';
      return 0;
    }
    
    //结果:
    Size of foo: 0
    Size of bar: 3

    这里须要说明的是:
    replacing its current contents
    modifying its size accordingly

    std::vector::assign
    相同直接代码:

    #include <iostream>
    #include <vector>
    
    int main ()
    {
      std::vector<int> first;
      std::vector<int> second;
      std::vector<int> third;
    
      first.assign (7,100);             // 7 ints with a value of 100
    
      std::vector<int>::iterator it;
      it=first.begin()+1;
    
      second.assign (it,first.end()-1); // the 5 central values of first
    
      int myints[] = {1776,7,4};
      third.assign (myints,myints+3);   // assigning from array.
    
      std::cout << "Size of first: " << int (first.size()) << '
    ';
      std::cout << "Size of second: " << int (second.size()) << '
    ';
      std::cout << "Size of third: " << int (third.size()) << '
    ';
      return 0;
    }
    //输出:
    Size of first: 7
    Size of second: 5
    Size of third: 3

    这里相同须要说明:
    replacing its current contents
    modifying its size accordingly

  • 相关阅读:
    BF算法和KMP算法
    Python课程笔记 (五)
    0268. Missing Number (E)
    0009. Palindrome Number (E)
    0008. String to Integer (atoi) (M)
    0213. House Robber II (M)
    0198. House Robber (E)
    0187. Repeated DNA Sequences (M)
    0007. Reverse Integer (E)
    0006. ZigZag Conversion (M)
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7338379.html
Copyright © 2011-2022 走看看