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 << '\n'; 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()) << '\n';
std::cout << "Size of bar: " << int(bar.size()) << '\n';
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()) << '\n';
std::cout << "Size of second: " << int (second.size()) << '\n';
std::cout << "Size of third: " << int (third.size()) << '\n';
return 0;
}
//输出:
Size of first: 7
Size of second: 5
Size of third: 3

这里相同须要说明:

replacing its current contents

modifying its size accordingly

实战c++中的vector系列--构造、operator=和assign差别的更多相关文章

  1. 实战c++中的vector系列--再谈vector的insert()方法(都是make_move_iterator惹的祸)

    之前说过了关于vector的insert()方法,把vector B的元素插入到vector A中.vector A中的结果我们可想而知,可是vector B中的元素还会怎样? 看看之前写过的程序: ...

  2. 实战c++中的vector系列--vector的遍历(stl算法、vector迭代器(不要在循环中推断不等于end())、operator[])

    遍历一个vector容器有非常多种方法.使用起来也是仁者见仁. 通过索引遍历: for (i = 0; i<v.size(); i++) { cout << v[i] << ...

  3. 实战c++中的vector系列--知道emplace_back为何优于push_back吗?

    上一篇博客说道vector中放入struct.我们先构造一个struct对象.再push_back. 那段代码中,之所以不能使用emplace_back,就是由于我们定义的struct没有显示的构造函 ...

  4. 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)

    使用vector容器,即避免不了进行查找,所以今天就罗列一些stl的find算法应用于vector中. find() Returns an iterator to the first element ...

  5. 实战c++中的vector系列--creating vector of local structure、vector of structs initialization

    之前一直没有使用过vector<struct>,如今就写一个简短的代码: #include <vector> #include <iostream> int mai ...

  6. 实战c++中的vector系列--copy set to vector(别混淆了reserve和resize)

    stl算法中有个copy函数.我们能够轻松的写出这种代码: #include <iostream> #include <algorithm> #include <vect ...

  7. 实战c++中的vector系列--将迭代器转换为索引

    stl的迭代器非常方便 用于各种算法. 可是一想到vector.我们总是把他当做数组,总喜欢使用下标索引,而不是迭代器. 这里有个问题就是怎样把迭代器转换为索引: #include <vecto ...

  8. 实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())

    关于vector已经写的差不多了,似乎要接近尾声了,从初始化到如何添加元素再到copy元素都有所涉及,是时候谈一谈内存的释放了. 是的,对于数据量很小的vector,完全没必要自己进行主动的释放,因为 ...

  9. 实战c++中的vector系列--vector&lt;unique_ptr&lt;&gt;&gt;初始化(全部权转移)

    C++11为我们提供了智能指针,给我们带来了非常多便利的地方. 那么假设把unique_ptr作为vector容器的元素呢? 形式如出一辙:vector<unique_ptr<int> ...

随机推荐

  1. MySQL Workbench--Window安装试用

    MySQL Workbench 01.概述 MySQL Workbench provides DBAs and developers an integrated tools environment f ...

  2. Linux链接文件ln

    链接命令:ln 生成链接文件   ln [源文件] [目标目录] : 创建硬链接 -s:创建软链接    硬链接特征:(ln )1.拥有相同的i节点和存储block快,可以看做是同一个文件2.可通过i ...

  3. spring thymeleaf 自定义标签

    概述 thymeleaf2.1.5自定义标签及自定义属性案例,类似于JSP中的自定义JSTL标签 详细 代码下载:http://www.demodashi.com/demo/10495.html 一. ...

  4. Google Volley框架之https请求

    先插一句.Google出的volley框架本身是支持https请求的,可是仅仅是针对有第三方机构认证过的. 假设自己随便在网上搞的一个证书,那volley是不支持请求的. 本文讲下怎样让volley支 ...

  5. springmvc+spring框架

    jar包 com.springsource.javax.validation-1.0.0.GA.jar com.springsource.org.aopalliance-1.0.0.jar com.s ...

  6. Android 系统 root 破解原理分析

    现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的 原理吗?root破解的本质是什么呢?难道是利用了Lin ...

  7. Linux下发布javaWeb项目,配置环境变量,tomcat,和安装mysql数据库

    如果不懂,可以联系微博本人:QQ:3111901846 (原创) 1.配置java中jdk 注意一切操作,都是在root这个目录下进行的,不要选择其他目录,不然会出现一些小问题的 第一步: 你需要一个 ...

  8. Jmeter——BeanShell PreProcessor的用法

    一.什么是BeanShell BeanShell是一个小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法,并利用在JavaScript和Perl中常见的的松散类型.命 ...

  9. Note for video Machine Learning and Data Mining——training vs Testing

    Here is the note for lecture five. There will be several points  1. Training and Testing  Both of th ...

  10. 【转载】BasicDataSource配置说明

    commons DBCP 配置参数简要说明 在配置时,主要难以理解的主要有:removeAbandoned .logAbandoned.removeAbandonedTimeout.maxWait这四 ...