1. /*
  2. * vectorDemo.cpp
  3. *
  4. * Created on: Jul 17, 2014
  5. * Author: lichfeng
  6. */
  7. #include<vector>
  8. #include <iostream.h>
  9. #include <algorithm>
  10. #include"vectorDemo.H"
  11.  
  12. using namespace std;
  13.  
  14. void vectorDemo() {
  15. /**************************************************************************/
  16. /* constructors functions */
  17. /**************************************************************************/
  18. vector<int> first; // empty vector of ints
  19. vector<int> second(4, 100); // four ints with value 100
  20. vector<int> third(second.begin(), second.end()); // iterating through second
  21. vector<int> fourth(third); // a copy of third
  22. // the iterator constructor can also be used to construct from arrays:
  23. int myints[] = { 16, 2, 77, 29, 8, 3, 24 };
  24. vector<int> fifth(myints, myints + sizeof(myints) / sizeof(int));
  25.  
  26. cout << "The contents of fifth are:";
  27. for (vector<int>::iterator it = fifth.begin(); it != fifth.end(); ++it)
  28. cout << ' ' << *it;
  29. cout << '\n';
  30.  
  31. /**************************************************************************/
  32. /* iterator erase (iterator position); */
  33. /* iterator erase (iterator first, iterator last); */
  34. /* erase(): 在vector中移除一个元素(通过position),或者移除一个区间([first, last))内的元素*/
  35. /* 该函数返回值是所删除的元素的下一个元素。 */
  36. /* Note: 由于vector是以数组形式组织的,所以删除中间元素将导致vector中其他元素向前移动。这对vector */
  37. /* 而言是低效的操作,应减少使用。但此操作对list和deque等链表组织的容器很高效. */
  38. /**************************************************************************/
  39. //vector<int>::iterator ii;
  40. fifth.erase(fifth.begin() + 1);
  41. cout << "After erase by position, the contents of fifth are:";
  42. for (vector<int>::iterator it = fifth.begin(); it != fifth.end(); ++it)
  43. cout << ' ' << *it;
  44. cout << '\n';
  45.  
  46. fifth.erase(fifth.begin(), fifth.begin() + 2);
  47. cout << "After erase by range, the contents of fifth are:";
  48. for (vector<int>::iterator it = fifth.begin(); it != fifth.end(); ++it)
  49. cout << ' ' << *it;
  50. cout << '\n';
  51.  
  52. /***************************************************************************/
  53. /* capacity(): 返回当前vector已分配的存储空间大小(按照所存元素类型),该值大于等于size() */
  54. /* size(): 返回当前vector所实际存储的元素数目 */
  55. /* max_size(): 该vector可以分配的最大内存空间(操作系统限制的) */
  56. /* push_back():在vector末尾增加一个元素,将导致size数加1。当且仅当size数大于当前容量时, */
  57. /* 引起vector内存重新分配(按内存非配器算法增加vector容量 */
  58. /* pop_back(): 移除vector的最后一个元素,引起size减少1 */
  59. /* begin(): 返回指向vector第一个元素的iterator */
  60. /* end(): 返回指向vector最后一个元素的下一个元素的iterator, 不能取值。 */
  61. /* cbegin(): 返回指向vector第一个元素的const iterator,不允许修改vector数据 */
  62. /* cend(): 返回指向vector最后一个元素的下一个元素的const iterator, 不能取值。 */
  63. /* at(): 返回at(position)中position的引用. */
  64. /* front(): 返回vector第一個元素的引用. */
  65. /* back(): 返回vector中最后一个元素的引用. */
  66. /* clear(): 移除vector中所有的元素,将导致vector size为0.(capacity非强制变化). */
  67. /**************************************************************************/
  68. vector<int> vIntTest;
  69. cout << "0:The size is " << vIntTest.size() << endl;
  70. cout << "0:The capacity is " << vIntTest.capacity() << endl;
  71. cout << "0:The max capacity is " << vIntTest.max_size() << endl;
  72.  
  73. for (int i = 0; i < 10; i++)
  74. vIntTest.push_back(i);
  75. cout << "1:The size is " << vIntTest.size() << endl;
  76. cout << "1:The capacity is " << vIntTest.capacity() << endl;
  77.  
  78. vIntTest.pop_back();
  79. cout << "2:The size is " << vIntTest.size() << endl;
  80. cout << "2:The capacity is " << vIntTest.capacity() << endl;
  81.  
  82. vIntTest.insert(vIntTest.end(), 10, 100);
  83. cout << "3:The size is " << vIntTest.size() << endl;
  84. cout << "3:The capacity is " << vIntTest.capacity() << endl;
  85.  
  86. vIntTest.at(0) = 100;
  87. vIntTest.at(1) = 200;
  88. cout << "After set by at():";
  89. for (vector<int>::iterator it = fifth.begin(); it != fifth.end(); ++it)
  90. cout << ' ' << *it;
  91. cout << '\n';
  92.  
  93. vIntTest.back() = 1000;
  94. cout << "After set by back():";
  95. for (vector<int>::iterator it = fifth.begin(); it != fifth.end(); ++it)
  96. cout << ' ' << *it;
  97. cout << '\n';
  98. /***************************************************************************/
  99. /* rbegin(): 返回指向vector最后一个元素的迭代器,对翻转迭代器加操作将导致其向前移动. */
  100. /* empty(): 判斷vector是否為空并返回,空返回true,非空返回false */
  101. /* resize(): 調整容器的size以包含n個元素,移除多餘的元素或增大內存空間 */
  102. /* reserve(): 要求vector capacity至少包含n個元素,如果n大于當前capacity,vector容量將增加 */
  103. /***************************************************************************/
  104. vector<int> reserveVec(5);
  105. vector<int>::reverse_iterator ri;
  106.  
  107. int i=0;
  108. for(ri=reserveVec.rbegin(); ri!=reserveVec.rend(); ri++)
  109. {
  110. *ri = ++i;
  111. }
  112.  
  113. cout<<"reserveVec contains: ";
  114. for(vector<int>::iterator it= reserveVec.begin(); it != reserveVec.end(); it++)
  115. cout<<"*it ";
  116. cout<<endl;
  117.  
  118. /***************************************************************************/
  119. /* data(): 返回vector首元素的内部C类型指针,通过该指针完成所有的操作. */
  120. /* empty(): 判斷vector是否為空并返回,空返回true,非空返回false */
  121. /* resize(): 調整容器的size以包含n個元素,移除多餘的元素或增大內存空間 */
  122. /* reserve(): 要求vector capacity至少包含n個元素,如果n大于當前capacity,vector容量將增加 */
  123. /***************************************************************************/
  124.  
  125. //data()
  126. /*vector<int> myvector(5);
  127.  
  128. int* p = myvector.data();
  129.  
  130. *p = 10;
  131. ++p;
  132. *p = 20;
  133. p[2] = 100;
  134.  
  135. cout << "myvector contains:";
  136. for (unsigned i = 0; i < myvector.size(); ++i)
  137. cout << ' ' << myvector[i];
  138. cout << '\n';*/
  139.  
  140. // reserve()
  141. vector<int>::size_type sz;
  142.  
  143. vector<int> foo;
  144. sz = foo.capacity();
  145. std::cout << "making foo grow:\n";
  146. for (int i = 0; i < 100; ++i) {
  147. foo.push_back(i);
  148. if (sz != foo.capacity()) {
  149. sz = foo.capacity();
  150. cout << "capacity changed: " << sz << '\n';
  151. }
  152. }
  153.  
  154. vector<int> bar;
  155. sz = bar.capacity();
  156. bar.reserve(100); // this is the only difference with foo above
  157. cout << "making bar grow:\n";
  158. for (int i = 0; i < 100; ++i) {
  159. bar.push_back(i);
  160. if (sz != bar.capacity()) {
  161. sz = bar.capacity();
  162. cout << "capacity changed: " << sz << '\n';
  163. }
  164. }
  165.  
  166. //resize
  167. vector<int> myvector1;
  168.  
  169. // set some initial content:
  170. for (int i = 1; i < 10; i++)
  171. myvector1.push_back(i);
  172.  
  173. myvector1.resize(5);
  174. myvector1.resize(8, 100);
  175. myvector1.resize(12);
  176.  
  177. cout << "myvector contains:";
  178. for (int i = 0; i < myvector1.size(); i++)
  179. cout << ' ' << myvector1[i];
  180. cout << '\n';
  181. //myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0
  182.  
  183. }

Vector Demo的更多相关文章

  1. [javaSE] 集合框架(ArrayList,LinkedList,Vector)

    ArrayList特点:底层使用数组数据结构,查询速度快(使用脚标查),插入删除慢(索引要改变) LinkedList特点:底层使用链表数据结构,查询慢(需要一个一个去问),插入删除快 Vector特 ...

  2. 集合框架-Vector集合

    1 package cn.itcast.p1.vector.demo; 2 3 import java.util.Enumeration; 4 import java.util.Iterator; 5 ...

  3. C# 使用SIMD向量类型加速浮点数组求和运算(1):使用Vector4、Vector<T>

    作者: 目录 一.缘由 二.使用向量类型 2.1 基本算法 2.2 使用大小固定的向量(如 Vector4) 2.2.1 介绍 2.2.2 用Vector4编写浮点数组求和函数 2.3 使用大小与硬件 ...

  4. Scalaz(47)- scalaz-stream: 深入了解-Source

    scalaz-stream库的主要设计目标是实现函数式的I/O编程(functional I/O).这样用户就能使用功能单一的基础I/O函数组合成为功能完整的I/O程序.还有一个目标就是保证资源的安全 ...

  5. boost之bind

    bind1st bind2nd在stl里面有具体的实现,只是只能绑定两个参数. boost里面的bind使用bind(Fun f,A1 a1,A2,a2...)产生一个对象,这个对象可以有占位符,可以 ...

  6. PHP 类名::class含义

    自 PHP 5.5 起,关键词 class 也可用于类名的解析. 使用 ClassName::class 可以获取一个字符串,包含了类 ClassName 的完全限定名称.这对使用了命名空间的类尤其有 ...

  7. juc多线程编程学习

    JUC是java.util.concurrent的缩写,java.util.concurrent是在并发编程中使用的工具类. 在以前的解决并发问题,一般是通过Synchronize关键字,现在可以通过 ...

  8. Applying vector median filter on RGB image based on matlab

    前言: 最近想看看矢量中值滤波(Vector median filter, VMF)在GRB图像上的滤波效果,意外的是找了一大圈却发现网上没有现成的code,所以通过matab亲自实现了一个,需要学习 ...

  9. 关于QImage提取单色通道方法(vector)

    转载请标明处: 作者:微微苏荷 本文地址:关于QImage提取单色通道方法(vector) 近日,用QT和mxnet结合做一个图像识别的demo.遇到需要把图片从QImage转为vector单色分离的 ...

随机推荐

  1. dart系列之:dart中的异步编程

    目录 简介 为什么要用异步编程 怎么使用 Future 异步异常处理 在同步函数中调用异步函数 总结 简介 熟悉javascript的朋友应该知道,在ES6中引入了await和async的语法,可以方 ...

  2. [bzoj4777]Switch Grass

    结论:最短路径一定是单独的一条边且在最小生成树上,可以用反证法证明.那么求出最小生成树,对于每一个点建立一棵权值线段树,再对每一个权值线段树上的叶子节点开一个multiset,维护所有儿子中该种颜色的 ...

  3. 【JavaSE】异常

    Java异常 2019-07-06  22:16:29  by冲冲 1. 引例 任何程序都有出错的可能.比如代码少一个分号,那么运行的结果是 java.lang.Error.比如运行 System.o ...

  4. maven插件慢的解决方案

    -DarchetypeCatalog=local 地址:https://www.cnblogs.com/del88/p/6286887.html

  5. Pulsar云原生分布式消息和流平台v2.8.0

    Pulsar云原生分布式消息和流平台 **本人博客网站 **IT小神 www.itxiaoshen.com Pulsar官方网站 Apache Pulsar是一个云原生的分布式消息和流媒体平台,最初创 ...

  6. [CCC​2019] Tourism题解

    我们先考虑一下拿部分分: subtask1 考虑因为 \(n < 2k\) ,那么我们的划分一定是从中间某个地方裁开,且满足 \(k\) 的条件的,我们发现当划分点在 \([n\ mod\ k, ...

  7. Linux—查看内核版本、系统版本、系统位数

    一.查看内核版本命令: 1) [root@q1test01 ~]# cat /proc/version   Linux version 2.6.9-22.ELsmp (bhcompile@crowe. ...

  8. js变量作为数组对象的键值方法

    js变量作为数组对象的键值方法,变量键值获取数组值 js也可以像php的数组一样用下标获取数组的值,方法是: var arr = {'key':'abc'}; var key = 'key'; con ...

  9. Java、Scala类型检查和类型转换

    目录 Java 1.类型检查 2.类型转换 Scala 1.类型检查 2.类型转换 Java 1.类型检查 使用:变量 instanceof 类型 示例 String name = "zha ...

  10. 关于C语言中不同类型数据进行计算 有符号和无符号数进行计算

    float是8个有效位, 做个试验: 输出如下: 上面说明了什么: 1, 18/2.2 是除不尽的, 因为是define,所以没有给ratio变量赋值类型,但是从sizeof输出的结果是8,所以系统默 ...