129 lines
3.7 KiB
C++
129 lines
3.7 KiB
C++
#pragma once
|
|
#include "中文化.hpp"
|
|
#include "异常.hpp"
|
|
命名空间 中文标准 {
|
|
模板 <类型名 类型1>
|
|
类 向量{
|
|
公开的:
|
|
|
|
/* 注意:当长度单位为0时,内部指针是空的 */
|
|
向量() {
|
|
对象->指针 = 空指针;
|
|
对象->容量 = 0;
|
|
}
|
|
/* 专门用于处理花括号初始化列表 */
|
|
向量(常量 std::initializer_list<类型1>& init = {}) {
|
|
对象->指针 = 新建 类型1[init.size()] {空的};
|
|
对象->容量 = init.size();
|
|
长度单位 计数 = 0;
|
|
计次循环(适应 & 东西: init) {
|
|
对象->指针[计数++] = 东西;
|
|
}
|
|
}
|
|
|
|
~向量() {
|
|
删除 对象->指针;
|
|
对象->指针 = 空指针;
|
|
对象->容量 = 0;
|
|
}
|
|
/*----------访问器----------*/
|
|
长度单位 取容量() {
|
|
返回 对象->容量;
|
|
}
|
|
|
|
布尔 是否为空() {
|
|
返回 对象->容量 等于 0;
|
|
}
|
|
|
|
/*--------运算符重载--------*/
|
|
向量& _取下标重载( 常量 长度单位 下标 ) {
|
|
如果(下标 < 0 或 下标 >= 对象->容量)
|
|
抛出异常 下标越界{"向量", 对象->容量, 下标};
|
|
返回 对象->指针[下标];
|
|
}
|
|
|
|
/*--------可范围遍历--------*/
|
|
类型1* _开始() {
|
|
返回 对象->指针;
|
|
}
|
|
|
|
类型1* _结束() {
|
|
返回 对象->指针 + 对象->容量;
|
|
}
|
|
|
|
/*----------变异器----------*/
|
|
空类型 插入元素(常量 长度单位 位置, 常量 向量& 媒介) {
|
|
|
|
/* 越界检查 */
|
|
如果(位置 < 0 或 位置 > 对象->容量)
|
|
抛出异常 下标越界{"向量元素插入", 对象->容量+1, 位置};
|
|
|
|
适应 长度 = 取容量();
|
|
适应 新的 = 新建 类型1[长度 + 1] { 空的 };
|
|
|
|
/* 插入位置之前 */
|
|
计次循环(适应 计数 = 0; 计数 < 位置; ++计数)
|
|
新的[计数] = 对象->指针[计数];
|
|
|
|
/* 执行插入 */
|
|
新的[位置] = 媒介;
|
|
|
|
/* 插入位置之后 */
|
|
计次循环(适应 计数 = 位置 + 1; 计数 <= 长度; ++计数)
|
|
新的[计数] = 对象->指针[计数 - 1];
|
|
|
|
如果(对象->指针) 删除[] 对象->指针; /* 可能为空 */
|
|
对象->指针 = 新的;
|
|
}
|
|
|
|
空类型 追加元素(常量 向量& 媒介) {
|
|
适应 长度 = 取容量();
|
|
适应 新的 = 新建 类型1[长度 +1] {空的};
|
|
计次循环(适应 计数 = 0; 计数 < 长度; ++计数)
|
|
新的[计数] = 对象->指针[计数];
|
|
新的[长度] = 媒介;
|
|
如果(对象->指针) 删除[] 指针; /* 可能为空 */
|
|
对象->指针 = 新的;
|
|
}
|
|
|
|
空类型 删除元素(常量 长度单位 位置) {
|
|
|
|
/* 越界检查 */
|
|
如果(位置 < 0 或 位置 >= 对象->容量)
|
|
抛出异常 下标越界{"向量元素插入", 对象->容量 + 1, 位置};
|
|
|
|
适应 长度 = 取容量();
|
|
适应 新的 = (长度 等于 1)
|
|
? 空指针 : 新建 类型1[长度 - 1] { 空的 };
|
|
|
|
/* 目标位置之前 */
|
|
计次循环(适应 计数 = 0; 计数 < 位置; ++计数)
|
|
新的[计数] = 对象->指针[计数];
|
|
|
|
/* 目标位置之后 */
|
|
计次循环(适应 计数 = 位置; 计数 < 长度; ++计数)
|
|
新的[计数] = 对象->指针[计数 + 1];
|
|
|
|
删除[] 对象->指针;
|
|
对象->指针 = 新的;
|
|
}
|
|
|
|
|
|
|
|
/*----------------*/
|
|
//类 迭代器{
|
|
//公开的:
|
|
// 迭代器(常量 std::vector<类型1>::iterator& it) {
|
|
// this->it = it;
|
|
// }
|
|
//私有的:
|
|
// std::vector<类型1>::iterator it;
|
|
//};
|
|
/*----------------*/
|
|
|
|
|
|
私有的:
|
|
类型1 *指针;
|
|
长度单位 容量;
|
|
};
|
|
} |