向量的插入与删除:

定义一个向量(vector)模板类,实现向量的初始化、插入、删除操作:

  1 #include "stdafx.h"
  2 #include <iostream>
  3 using namespace std;
  4 #define default_capacity 3
  5 template <typename T>
  6 vector class
  7 {
  8 private:
  9     int size;
 10     int capacity;
 11     T* elem;
 12 public:
 13     vector();
 14     void expand();
 15     void shrink();
 16     void insert(T &e,int i);
 17     void remove(int i);
 18     void print();
 19     T & operator[](int r);  //重载下标操作符,可以类似于数组形式引用各元素
 20     int getsize();
 21 };
 22 template <typename T>
 23 vector <T>::vector()
 24 {
 25     capacity = default_capacity;
 26     elem = new T[capacity];
 27     size = 0;
 28 }
 29
 30 template <typename T>
 31 void vector<T>::expand()
 32 {
 33     if (size < capacity) return;    //规模小于容量
 34     T* oldelem = elem;
 35     elem = new T[capacity <<=1];
 36     for (int i = 0;i < size;i++)
 37         elem[i] = oldelem[i];
 38     delete[] oldelem;
 39 }
 40
 41 template <typename T>
 42 void vector<T>::shrink()
 43 {
 44     if (capacity < default_capacity)
 45     {
 46         return;
 47     }//容量小于初始容量
 48     if ((size * 4) <= capacity)
 49     {
 50         T *oldelem = elem;
 51         elem = new T[capacity >>= 1];
 52         for (int i = 0;i < size;i++)
 53             elem[i] = oldelem[i];
 54         delete[]oldelem;
 55     }
 56 }
 57
 58 template <typename T>
 59 void vector<T>::insert(T&e,int i)
 60 {
 61     expand();
 62     for (int j = size;j > r;j++)
 63     {
 64         elem[i] = elem[i - 1];
 65     }
 66     elem[i] = e;
 67     size++;
 68 }
 69
 70 template <typename T>
 71 void vector<T>::remove(int i)
 72 {
 73     int j;
 74     T e = elem[i];
 75     for (j = i + 1;j < size;j++)
 76     {
 77         elem[j - 1] = elem[j];
 78     }
 79     size--;
 80     shrink();
 81     return e;
 82 }
 83
 84 template <typename T>
 85 void vector<T>::print()
 86 {
 87     int i;
 88     for (i = 0;i < size;i++)
 89         cout << elem[i] << endl;
 90     cout << endl;
 91 }
 92
 93 template <typenmae T>
 94 T & vector<T>::operator[](int r)
 95 {
 96     return elem[r];
 97 }
 98
 99 template <typename T>
100 int vector<T>::getsize
101 {
102     return size;
103 }
时间: 2024-10-09 10:04:31

向量的插入与删除:的相关文章

闭散列表的查找、插入和删除操作的完整C代码

/*闭散列表的建立.查找.插入.删除*/ #include <stdio.h> #define NIL -1 //假设关键字为非负整数 #define DEL -2 typedef int KeyType; KeyType HashTable[13]; //便于验证算法,关键字个数假定为不超过13,哈希表长定为13 //关键字插入函数 void InsertHashTable(KeyType k) { for(int i=0; i<13; i++) if( NIL == HashTabl

最小堆的建立 插入 与删除

堆是完全二叉树,完全二叉树最大的特点就是 把数据储存在数组里 通过父子结点的关系来做  不用实际建树  parent=leftchild/2: leftchild=2*parent  右就加1这儿指的是序号关系,储存的时候注意是利用树的逻辑图 从上到下 从左到右编号12345..... 建堆:实际是把数据先放入数组(注意下标从1开始),对应逻辑图,写调整代码,我的基本思路是从数组末尾开始,对应元素与其父节点比较,满足条件就换值,并且对被换的调用调整函数(要单独写个调整函数)因为被换的一个是可能不

【JS学习笔记】DOM操作应用-创建、插入和删除元素;文档碎片

一.创建.插入和删除元素 (1)创建DOM元素 createElement(标签名) 创建一个节点 appendChild(节点) 追加一个节点 例子:为ul插入li <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="htt

重温数据结构:二叉排序树的查找、插入、删除

读完本文你将了解到: 什么是二叉排序树 Binary Sort Tree BST 二叉排序树的关键操作 查找 插入 删除 运行代码测试 一道面试题 总结 Thanks 我们知道,二分查找可以缩短查找的时间,但是有个要求就是 查找的数据必须是有序的.每次查找.操作时都要维护一个有序的数据集,于是有了二叉排序树这个概念. 上篇文章 我们介绍了 二叉树 的概念,二叉树有左右子树之分,想必在区分左右子树时有一定的规则. 现在我们来介绍二叉树的一种特殊形式 - 二叉排序树,了解它的区分策略及常用操作. 什

数据结构Java实现03----单向链表的插入和删除

数据结构Java实现03----单向链表的插入和删除 文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构:            概念: 链式存储结构是基于指针实现的.我们把一个数据元素和一个指针称为结点.   数据域:存数数据元素信息的域. 指针域:存储直接后继位置的域. 链式存储结构是用指针把相互直接关联的结点(即直接前驱结点或直接后继结点)链接起来.链式存储结构的线性表称为链表. 链表类型: 根据链表的构造方式的不同可以分为: 单向链表 单向循环链表 双向循环链表 二

MongoDB之DBref(关联插入,查询,删除) 实例深入

MongoDB之DBref(关联插入,查询,删除) 实例深入 如图所示,A,B,C三个Collection互相关联. 其中的数字为document的value值. 关于DBref的入门可以看http://blog.csdn.net/crazyjixiang/article/details/6616678这篇文章. 我们先建立A collection. Cpp代码 > var a={value:"1"} > var b={value:"2"} > v

二叉平衡树的插入和删除操作

1.      二叉平衡树 二叉排序树的时间复杂度和树的深度n有关.当先后插入的结点按关键字有序时,二叉排序树退化为单枝树,平均查找长度为(n+1)/2,查找效率比较低.提高查找效率,关键在于最大限度地降低树的深度n.因此需要在构成二叉排序树的过程中进行“平衡化”处理,使之成为二叉平衡树. 二叉平衡树,又称AVL树.它或者是一棵空树,或者是具有下列性质的树: 1)      具备二叉排序树的所有性质: 2)      左子树和右子树深度差的绝对值不超过1: 3)      左子树和右子树都是二叉

DButils工具类可以用来获取数据库连接向数据库插入更新删除对象2

package com.ctl.util; import java.awt.Color; import java.awt.Font; import java.awt.Insets; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.*; import java.lang.reflect.*; import java.sql.*; import java.text.SimpleD

树的插入、删除、旋转归纳

AVL 树的插入.删除.旋转归纳 参考链接: http://blog.csdn.net/gabriel1026/article/details/6311339 1126号注:先前有一个概念搞混了: 节点的深度 Depth 是指从根节点到当前节点的长度: 节点的高度 Height 是指从当前节点向下,到子孙中所有叶子节点的长度的最大值. 之前简单了解过 AVL 树,知道概念但一直没动手实践过.Now AVL 树是二叉搜索树的一种.二叉搜索树的规则就是:每个节点的 left child 都比自己小,