首先要注意的一点是模板类在VS中编译时如果将定义和声明分开会出现无法解析的问题,所以一般比较常见的解决的办法是将声明和定义放在同一个头文件中然后统一的调用,下面就是用模板类实现线性表的编写

#pragma once

#include <iostream>
using namespace std; template<class T>
class Linearlist
{
private:
T * linear_array;//数组
int array_length;//数组的空间的长度
int array_size;//数组的元素的个数
public:
//构造函数和析构函数
Linearlist( int length=10);
~Linearlist() { delete[] linear_array; }
//类方法声明
bool empty() { return array_size == 0; }
int size() {return array_size;}
int get(int num);
int insert(int value, int num=-1);
int erase(int num);
int output();
}; //默认构造函数
template<class T>
Linearlist<T>::Linearlist(int length)
{
linear_array = new T[length];
array_length = length;
array_size = 0;
} //类方法定义
template<class T>
int Linearlist<T>::get(int num)
{
return linear_array[num];
} template<class T>
int Linearlist<T>::insert(int value, int num)
{
if (num == -1)
{
if (array_size >= array_length)
return 1;
linear_array[array_size] = value;
array_size++;
return 0;
}
else
{
if (num > array_length)
return 1;
if (array_size >= array_length)
return 1;
copy(linear_array + num, linear_array + array_size , linear_array + num + 1);
linear_array[num] = value;
array_size++;
return 0;
}
} template<class T>
int Linearlist<T>::erase(int num)
{
if (num > array_length)
return 1;
copy(linear_array + num + 1, linear_array + array_size , linear_array + num);
linear_array[array_size - 1] = 0;
array_size--;
return 0;
} template<class T>
int Linearlist<T>::output()
{
for (int i = 0; i < array_size; i++)
{
cout << linear_array[i] << " ";
}
cout << endl;
return 0;
}

  main函数中得调用情况

#include "linearlist.h"

int main()
{
Linearlist<int> temp(20); temp.insert(20);
temp.insert(11);
temp.insert(13, 1);
temp.insert(99, 2);
temp.insert(10);
temp.erase(1);
temp.output(); return 0;
}

  

c++ 用模板类实现顺序储存的线性表的更多相关文章

  1. 2019-02-03 线性表的顺序储存结构C语言实现

    #include<cstdio> #define MAXSIZE 20 typedef int Elemtype; //Elemtype类型根据实际情况而定,这里取int typedef ...

  2. 解析Spring第四天(Spring中的事物、Spring框架来管理模板类)

    JDBC模板技术: Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单 template 模板 都是Spring框架提供XxxTemplate 提供了JDBC模板,Sp ...

  3. STL标准模板类

    STL,中文名标准模板库,是一套C++的标准模板类(是类!),包含一些模板类和函数,提供常用的算法和数据结构. STL分为:迭代器,容器,适配器,算法以及函数对象. --迭代器是一种检查容器内元素并遍 ...

  4. C++11特性(模板类 initializer_list)

    [1]initializer_list模板类 C++primer 原文如下: 通读原文相关篇幅,分析解读内容如下: 提供initializer_list类的初衷,为了便于将有限个同一类型(或可转换为同 ...

  5. C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)

    1.  主版本模板类 首先我们来看一段初学者都能看懂,应用了模板的程序: 1 #include <iostream> 2 using namespace std; 3 4 template ...

  6. [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2   template < class _Ty, cl ...

  7. C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现

    前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. #pragma once #inc ...

  8. [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2   template <  class _Ty,  ...

  9. 实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2   template < class _Ty, cl ...

随机推荐

  1. Pytorch-创建tensor

    引言 本篇介绍创建tensor的几种方式 Import from numpy from_numpy() float64 是 double 类型,也就是说从numpy导入的float其实是double类 ...

  2. DES加密解密工具

    using System; using System.Text; using System.Security.Cryptography; using System.IO; namespace DESP ...

  3. cisco 访问控制列表

    LAB-A:Lab-A(config)#host Lab-A Lab-A(config)#interface Ethernet0/0  LAB-A(config-if)#ip address 172. ...

  4. 解析之Apache解析

  5. 【VS开发】【DSP开发】浅谈Linux PCI设备驱动(一)

    要弄清楚Linux PCI设备驱动,首先要明白,所谓的Linux PCI设备驱动实际包括Linux PCI设备驱动和设备本身驱动两部分.不知道读者理不理解这句话,本人觉得这句话很重要,对于PCI.US ...

  6. C#追加日志文件

    追加日志文件 using System; using System.IO; class DirAppend { public static void Main() { using (StreamWri ...

  7. 传统Java Web(非Spring Boot)、非Java语言项目接入Spring Cloud方案--temp

    技术架构在向spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项 ...

  8. MyBatis动态SQL第一篇之实现多条件查询(if、where、trim标签)

    一.动态SQL概述 以前在使用JDBC操作数据时,如果查询条件特别多,将条件串联成SQL字符串是一件痛苦的事情.通常的解决方法是写很多的if-else条件语句对字符串进行拼接,并确保不能忘了空格或在字 ...

  9. C++多线程基础学习笔记(八)

    shared_futrue和futrue_status的用法 shared_futrue是一个类模板,类似于futrue,不同的是它的成员函数get()可以使用多次,因为是复制数据,而futrue的g ...

  10. codeforces 842C Ilya And The Tree (01背包+dfs)

    (点击此处查看原题) 题目分析 题意:在一个树中,有n个结点,记为 1~n ,其中根结点编号为1,每个结点都有一个值val[i],问从根结点到各个结点的路径中所有结点的值的gcd(最大公约数)最大是多 ...