// 自动扩容,采用2倍扩容策略
// RANK为秩类型,默认为int
- 构造
// 默认构造,按容量初始化空vector
Vector(RANK capacity=DEFAULT_CAP);
// 拷贝构造
Vector(Vector<T> const& V, RANK lo=0, RANK hi=-1);
// 传入长度和默认值
Vector(RANK, const T& default_value);
// 传入序列及区间,复制到本vector进行构建
Vector(const T *A, RANK lo, RANK hi, bool heapFlag=false);
// 使用列表初始化容器进行初始化
Vector(const initializer_list<T>&);
- 重载运算符
// [] 循秩访问(允许负数索引)
T e = arr[index]; // 读
arr[index] = e; // 改
// + 返回两个vector合并产生的副本
Vector<T> v = v1 + v2;
// += 在末端追加(vec表示Vector<int>)
vec += 5; // 追加单个元素
vec += {5, 6}; // 追加初始化序列
vec += vec2; // 追加另一Vector<int>
// 注意:vec+=x 不等价于 vec=vec+x,后者会额外创建副本,对于Vector的所有派生类,类似的操作符都有这种区别
- 访问
// 循秩访问(允许负数索引,索引范围:[-size, size) )
T get(int index);
// 在区间内按值查找值的索引(失败返回-1)
virtual RANK find(const T& value, RANK lo=0, RANK hi=-1);
// 截取区间
Vector<T> sub(RANK lo, RANK hi);
- 修改
void put(RANK idx, const T& value);
- 插入
// 插入单个元素
void insert(RANK idx, const T& value);
// 插入一段vector
void insert(RANK idx, const Vector<T> &v);
- 末端追加
// 追加单个元素
void append(const T& value);
// 追加数组区间
void extend(const T* A, RANK lo, RANK hi);
// 追加一段序列
void extend(const initializer_list<T>&);
// 追加另一Vector
void extend(const Vector<T> &);
// 返回两个vector合并产生的副本
auto concat(Vector<T> v); // auto是为了便于派生类使用
- 删除
// 按索引删除
T pop(RANK idx);
// 按值删除
RANK remove(const T& value);
// 删除区间
bool delRng(RANK lo, RANK hi);
// 清空
void clear();
- 获取信息
// 长度
RANK size();
// 是否为空
bool empty();
- 排序
void sort(RANK lo=0, RANK hi=-1);
- 去重
- 遍历操作
template<typename VST> // VST是函数指针
void map(VST &visit);
- 构造
// 默认构造,按容量初始化空SortedVector
SortedVector(RANK capacity=DEFAULT_CAP);
// 拷贝构造--复制SortedVector
SortedVector(const SortedVector<T> & sv, RANK lo=0, RANK hi=-1);
// 构造--根据Vector
SortedVector(const Vector<T>& sv, RANK lo=0, RANK hi=-1);
// 构造--根据初始化列表
SortedVector(const initializer_list<T>&);
- 扩充
// 新增元素
RANK add(const T& e);
// 合并另一有序数组
void extend(const SortedVector<T> &);
// 合并Vector
void extend(const Vector<T> &);
// 合并两个SortedVector生成副本
auto concat(const Vector<T> &); // auto是为了便于派生类使用
- 访问
// 继承,循秩访问(允许负数索引,索引范围:[-size, size) )
T get(int index);
// 二分查找,失败时返回-1
virtual RANK find(const T& value, RANK lo=0, RANK hi=-1);
// 继承,截取区间
Vector<T> sub(RANK lo, RANK hi);
- 重载运算符
// 继承,[] 循秩访问(允许负数索引)
T e = arr[index];
// + 返回两个有序vector合并产生的副本
SortedVector<T> v = v1 + v2;
// += 在末端追加(vec表示Vector<int>)
vec += 5; // 追加单个元素
vec += vec2; // 追加另一SortedVector<int>
- 删除
// 继承,按索引删除
T pop(RANK idx);
// 继承,按值删除
RANK remove(const T& value);
// 继承,删除区间
bool delRng(RANK lo, RANK hi);
// 继承,清空
void clear();
- 获取信息
// 继承,长度
RANK size();
// 继承,是否为空
bool empty();
- 去重
- 遍历操作
template<typename VST> // 继承,VST是函数指针
void map(VST &visit);
// 继承自sorted vector,禁用部分父类api
- 构造
// 默认构造:根据容量创建空集合
Set(RANK capacity=DEFAULT_CAP);
// 拷贝构造
Set(const Vector<T>& set);
// 利用初始化列表创建集合
Set(const initializer_list<T>& il);
- 增删
// 新增元素
bool add(const T& e);
// 按值删除
void remove(const T& value);
// 继承,清空
void clear();
- 重载运算符
// 判断两集合相等 ==
set == set1; // bool
// 真含于 <
set < set1; // bool
// 含于 <=
set <= set1; // bool
// 真包含 >
set > set1; // bool
// 包含
set >= set1; // bool
// 是否含有(元素)
set >> elem; // bool,等价操作:set.contain(elem);
// 元素是否属于集合
elem << set; // bool, 同样等价于:set.contain(elem);
// 并集 |
set | set1;
// 取并集并更新于自身 |=
set |= set1;
// 交集 &
set & set1;
// 取交集并更新于自身 &=
set &= set1;
// 差集 -
set - set1;
// 取差集并更新于自身 -=
set -= set1;
// 对称差 ^
set ^ set1;
// 取对称差并更新于自身 ^=
set ^= set1;
- 获取信息
// 继承,长度
RANK size();
// 继承,是否为空
bool empty();
- 遍历操作
template<typename VST> // 继承,VST是函数指针
void map(VST &visit);
- 构造
// 默认构造,复制字符数组生成
String(const char* A="", RANK lo=0, RANK hi=-1);
// 拷贝构造
String(const String&);
- 查找
// 查找字符数组
RANK find(const char*);
// 查找String
RANK find(const String&);
- 替换
// 全替换(返回替换次数)
int replace(const char*, const char*); // 两参数可分别替换为String类型
// 插入
void insert(RANK, const char*);
void insert(RANK, const String&);
- 子串
// 截取
String sub(RANK, RANK);
// 截去
String cut(RANK, RANK);
- 重载运算符
// +
str + 'a'; // 字符
str + "abc"; // 字符数组
str + str1; // string
/* += 提供与+同样的支持,区别是不产生副本 */
// ==
str1 == str2; // 字符串判等
// <<
cout<<str; // 输出流
// [] 循秩访问(允许负数索引)
char e = str[index]; // 读
str[index] = e; // 改
- 数组操作
// 是否空
bool empty() const;
// 大小
RANK size() const;
// 按索引获取值
T& get(RANK idx) const;
// 修改
void put(RANK idx, const T& value);