废话不多说了,直接给大家上关键代码了。
#pragma once #include <assert.h> template<class T> class SeqList { public: SeqList() :_a(NULL) ,_size(1) ,_capacity(1) {} SeqList(T* a, size_t size) :_a(new T[size]) ,_size(size) ,_capacity(size) { for (size_t i = 0; i < _size; ++i) { _a[i] = a[i]; } } //拷贝构造函数常规写法 /*SeqList(const SeqList<T>& s) :_a(new T[s._size]) ,_size(s._size) ,_capacity(s._capacity) { for (size_t i = 0; i < _size; ++i) _a[i] = s._a[i]; }*/ //拷贝构造函数现代写法 SeqList(const SeqList<T>& s) :_a(NULL) { SeqList<T> tmp(s._a, s._size); swap(_a, tmp._a); _size = s._size; _capacity = s._capacity; } ~SeqList() { if (_a) delete[] _a; } //赋值运算符重载常规写法 SeqList<T>& operator=(const SeqList<T>& s) { if (this != &s) { T* tmp = new T[s._size]; for (size_t i = 0; i < s._size; ++i) { tmp[i] = s._a[i]; } delete[] _a; _a = tmp; _size = s._size; _capacity = s._capacity; } return *this; } //赋值运算符重载现代写法 /*SeqList<T>& operator=(SeqList<T> s) { if (this != &s) { swap(_a, s._a); _size = s._size; _capacity = s._capacity; } return *this; }*/ public: void Print() { for (size_t i = 0; i < _size; ++i) { cout<<_a[i]<<" "; } cout<<endl; } void PushBack(const T& x) { _CheckCapacity(); _a[_size++] = x; } void PopBack() { assert(_size > 0); --_size; } void Insert(int pos, const T& x) { assert(pos >= 0 && pos <= _size); _CheckCapacity(); int iIndex = _size; while (iIndex > pos) //int和size_t比较为什么不行? { _a[iIndex] = _a[iIndex-1]; --iIndex; } _a[iIndex] = x; ++_size; } void Erase(size_t pos) { assert(_size > 0 && pos < _size); size_t index = pos; while (index < _size-1) { _a[index] = _a[index+1]; ++index; } --_size; } int Find(const T& x) { for (size_t i = 0; i < _size; ++i) { if (_a[i] == x) { return i; } } return -1; } T& operator[](size_t index) { assert(index >= 0 && index < _size); return _a[index]; } void Reserve(size_t size) //保留空间,增容到size { _capacity = size; _a = (T*)realloc(_a, _capacity * sizeof(T)); } void Clear() //不释放空间 { _size = 0; } void Size() { return _size; } protected: void _CheckCapacity() { if (_size+1 > _capacity) { _capacity = _capacity*2; _a = (T*)realloc(_a, _capacity * sizeof(T)); } } protected: T* _a; size_t _size; size_t _capacity; };
以上所述是小编给大家介绍的顺序表的C++实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍C++链表倒序实现方法,包括了C++链表倒序实现方法的使用技巧和注意事项,需要的朋友参考一下 本文通过一个实例展示了C++实现链表倒序的方法,对于C++数据结构的学习有很好的参考借鉴价值。具体方法如下: 首先,C++链表倒序的难点在于如何一个个地修改。虽然不是数组,但是大概思想是一样的,所以可以用一个for循序,一个游标对应for循环里面的 i,只不过要记得前一个节点和后一个节点,尤
本文向大家介绍C++实现第K顺序统计量的求解方法,包括了C++实现第K顺序统计量的求解方法的使用技巧和注意事项,需要的朋友参考一下 一个n个元素组成的集合中,第K个顺序统计量(Order Statistic)指的是该集合中第K小的元素,我们这里要讨论的是如何在线性时间(linear time)里找出一个数组的第K个顺序统计量。该问题的算法对于C++程序员来说有一定的借鉴价值。具体如下: 一、问题描
本文向大家介绍C++实现翻转单词顺序,包括了C++实现翻转单词顺序的使用技巧和注意事项,需要的朋友参考一下 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。 思路:首先将整个句子按字符翻转,然后再将其中每个单词的字符旋转。 再给
本文向大家介绍C#双向链表LinkedList排序实现方法,包括了C#双向链表LinkedList排序实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#双向链表LinkedList排序实现方法。分享给大家供大家参考。具体如下: 1.函数 打印链表函数PrintLinkedList 和 排序函数SortLinkedList 注:下面代码中的链表每项都是double类型,如果换做其他
本文向大家介绍C++实现闹钟程序的方法,包括了C++实现闹钟程序的方法的使用技巧和注意事项,需要的朋友参考一下 本文所述为C++实现闹钟程序的方法,代码结构相对简单,注释也较为完善。现分享给大家供大家参考。 具体功能代码如下: 感兴趣的读者可以测试运行一下该实例代码,功能不足之处可以根据情况加以改进和完善。希望该实例能够对大家学习C++起到一定的帮助作用。
本文向大家介绍C语言实现单链表实现方法,包括了C语言实现单链表实现方法的使用技巧和注意事项,需要的朋友参考一下 C语言实现单链表实现方法 链表和我们之前实现过的顺序表一样,都是简单的数据结构,链表分为单向链表、双向链表、循环链表。而单向链表又分为两种实现方法,一种为带头节点的单链表,一种为不带头节点的单链表。我们来具体看看不带头节点的单链表的实现 单链表:它是一种链式存储的线性表,用一组地址任意的