STL vector方法总结(一)Member functions(34)

这里是vector的所有构造方法,成员方法的一些总结,具体的可以详看后面的链接。

容器:Vector

原型:

template < class T, class Alloc = allocator<T> > class vector;

描述:vector是一种顺序容器,其行为类似于大小可以改变的array数组。

跟array一样,vector使用连续的存储单元来存储里面的元素。这意味着vector可以使用正常的指针的偏移量来访问其元素。它跟array一样的高效,但是不同于array的是,vector的大小可以动态地改变,存储他们元素的空间可以自动地进行伸缩。

原文链接:vector的介绍

——————————————————————————————————————————————————————————————————

public member function

vector的构造器:这里我只翻译C++11的,C++98的就不翻译了。

构造器原型:

<vector>

std::vector::vector

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());
(1) empty container constructor (default constructor)
原型:explicit vector (const allocator_type& alloc = allocator_type());
空参数构造器,默认的构造器
例子:vector<int> vi;
(2) fill constructor
原型:

explicit vector (size_type n);
         vector (size_type n, const value_type& val,
                 const allocator_type& alloc = allocator_type());
声明一个有n个元素的构造器,如果提供了初始值,则每一个元素的值都是那个提供的值
例子:
vector<int> vi(10);//声明一个拥有10个int元素的vector;
vector<int> vi(10,55);//声明一个拥有10个int元素的vector,每一个元素的值都是55;
(3) range constructor
原型:
template <class InputIterator>
  vector (InputIterator first, InputIterator last,
          const allocator_type& alloc = allocator_type());
构造一个容器能存放与[first,lase)区间的元素数目一样的vector,存放的元素的值以及位置和[first,lase)中完全一样,方向也要一致;
例子:
vector<int> v1={10,20,30,40};//v1中存放的数组为{10,20,30,40};
vector<int> v2(v1.begin(),v1.end());//v2相当于从v1.begin()开始,一直对应复制v1里面的每一个元素,直到迭代器为v1.end();
(4) copy constructor (and copying with allocator)
原型:

vector (const vector& x);
vector (const vector& x, const allocator_type& alloc);
复制构造函数,逐个复制x中的每一个元素,存放到本数组中,方向一致。
例子:
vector<int> v1={10,20,30,40};//v1中存放的数组为{10,20,30,40};
vector<int> v2(v1);//复制v1中所有元素,存放到v2中,
(5) move constructor (and moving with allocator)
原型:
vector (vector&& x);
vector (vector&& x, const allocator_type& alloc);
Constructs a container that acquires the elements of x.

If alloc is specified and is different from x‘s allocator, the elements are moved. Otherwise, no elements are constructed (their ownership is directly transferred).

x is left in an unspecified but valid state.

//本条不是按原意翻译,只是为了更好地说明
移动构造函数。(使用C++11中的移动语义实现)//不知移动语义为何物的可以google一下
将右值引用中x的所有元素移动到新的vector中,以避免代价昂贵的复制。
//原意
如果新的分配器和x的分配器不一样,那么将移动x里面的元素到新的vector,如果分配器是一样的,那么将直接转换其所有权
例子:(例子有点难举,)
vector<int> v2(参数是一个右值引用(比如一个临时变量))
(6) initializer list constructor
原型:
vector (initializer_list<value_type> il,
       const allocator_type& alloc = allocator_type());
初始化列表构造器,从初始化列表il中复制每一个元素,放到vector中,方向一致。
例子:
vector<int> v1({10,20,30,40});//v1的值为{10,20,30,40}

The container keeps an internal copy of alloc, which is used to allocate and deallocate storage for its elements, and to construct and destroy them (as specified by its allocator_traits).

//这段可能不怎么正确,但意思是差不多的

容器分配器使用元素内置的分配器创建容器里面的元素,析构时也是一样,例如如果里面元素是int,那么分配器也是使用int的分配器

The copy constructor (4, first signature) creates a container that keeps and uses a copy of the allocator returned by calling the appropriate selected_on_container_copy_construction trait
on x‘s allocator.

复制构造函数(第4种)创建一个使用和x一样的分配器。

The move constructor (5, first signature) acquires x‘s allocator.All elements are copiedmoved or otherwise constructed by calling allocator_traits::construct with
the appropriate arguments.

移动构造函数(第5种)如果使用x的分配器,那么将是所有权的转移,如果是其他的分配器,那么将移动原来的元素。

Parameters

参数说明:

alloc
分配器对象

容器使用并保持一个内在的复制分配器。

allocator_type是一种容器使用的内在的分配器类型,作为vector模板参数里面的第二个参数。

If allocator_type is an instantiation of the default allocator (which has no state), this is not relevant.

//这句不太会翻译

如果allocator_type是默认的实例化分配器(没有状态),这是不相关的。

n
容器最初的大小,(即最开始容器存放的元素数目)

n是一个无符号整形类型。

val
.容器初始化时里面每一个元素的初始化值。
val的值类型必须和模板参数里面的参数《T》一致
first, last
输入迭代器开始和结束的范围。这是一个开区间的范围[first,last),包括first--end里面的所有元素,包括first,但是不包括last
x
另一个同类型(T和Alloc)vector数组的名称
il
一个初始化列表对象。

原文地址:STL vector的构造函数和析构函数(2)

——————————————————————————————————————————————————————————————————

public member function

<vector>

std::vector::operator=

copy (1)
vector& operator= (const vector& x);
move (2)
vector& operator= (vector&& x);
initializer list (3)
vector& operator= (initializer_list<value_type> il);

Assign content

调整当前容器内容,替换当前内容,并调整当前容器的大小。

从x中依次复制其元素到该vector中,x中的元素依旧有效。

从x中移动其元素到该vector中,(x依旧有效但不指定是否离开?)

从初始化列表中复制元素到容器中。

容器保持现有的内存分配器,除非分配器的特性指明了应该继承x的内存分配器,那么将使用其内存分配器去分配及释放内存,如果发生重分配,或者构造,析构需要的时候,就使用该分配器。

Parameters

x
一个和该vector相同类型(模版参数T和Alloc)的vector
il
一个初始化列表对象,编译器将自动从该对象中构造元素。

Return value

返回值为该vector对象。

原文地址:http://blog.csdn.net/qq844352155/article/details/38679129

——————————————————————————————————————————————————————————————————

//总结的不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。

转载请注明出处:http://blog.csdn.net/qq844352155

author:天下无双

Email:[email protected]

2014-8-27

于GDUT

——————————————————————————————————————————————————————————————————

时间: 2024-11-08 00:24:54

STL vector方法总结(一)Member functions(34)的相关文章

STL vector方法总结(二)Iterators(35)

这里是vector的所有构造方法,成员方法的一些总结,具体的可以详看后面的链接. public member function <vector> std::vector::begin C++98 C++11 iterator begin(); const_iterator begin() const; 该方法返回一个指向该vector中第一个元素的iterator. 需要注意的是,和front()方法不同,front是返回第一个元素的引用,而begin返回的是一个指向第一个元素的随机访问迭代器

STL vector使用方法介绍

介绍 这篇文章的目的是为了介绍std::vector,怎样恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该可以有效地使用vector容器,并且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,可以操作多种数据结构和算法的模板类和函数库.vector之所以被觉得是一个容器,是由于它可以像容器一样存放各种类型的对象

STL之Vector方法介绍(二)

如何拼接两个vector 在C++中很多功能不像Python中那么方便,比如说要拼接两个vector,在C++中就需要自己实现.但是vector有一个非常好的函数可以简便的实现该功能,那就是insert函数. #include <iostream> #include <vector> using namespace std; vector<int> combine(vector<int> &a, vector<int> &b) {

STL vector中的rbegin方法(5)

public member function <vector> std::vector::rbegin C++98 C++11 reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin() const noexcept; Return reverse iterator to reverse beginning 返回一个反向的首元素. 例子: #include <iostream> #include <v

STL vector中的front方法(4)

public member function <vector> std::vector::front reference front(); const_reference front() const; Access first element 访问第一个元素 Returns a reference to the first element in the vector. 返回第一个元素的引用. Unlike member vector::begin, which returns an itera

STL vector中的crbegin方法(7)

其实crbegin就相当于cbegin+rbegin. 关于这两个函数可以看我的上两篇博文. public member function <vector> std::vector::crbegin const_reverse_iterator crbegin() const noexcept; Return const_reverse_iterator to reverse beginning Returns a const_reverse_iterator pointing to the

STL vector用法介绍

介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象

C++ stl vector介绍

转自: STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是

STL vector

author:Donald-hu    theme:STL vector 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.v