1# 有序vector
2
3## 概述
4### 简介
5提供了一个可以对插入元素自动排序的vector,具有添加元素,删除最后一个元素,合并vector等功能。
6## 涉及功能
7### class SortedVector
8#### 接口说明
9
10|返回类型           |名称           |
11| -------------- | -------------- |
12| | **SortedVector**()<br>构造函数。  |
13| | **SortedVector**(const SortedVector< TYPE, false >& rhs)<br>拷贝构造函数,不允许出现重复元素。 |
14| | **SortedVector**(const SortedVector< TYPE, true >& rhs)<br>拷贝构造函数,允许出现重复元素。 |
15| | **SortedVector**(const std::vector< TYPE >& orivect) |
16| virtual | **~SortedVector**()<br>析构函数。  |
17| ssize_t | **Add**(const TYPE& item)<br>在正确的位置添加一个新元素`item`。  |
18| const TYPE* | **Array**() const<br>返回一个指向vector的第一个元素的const指针,用于访问vector的元素。  |
19| const TYPE& | **Back**() const<br>返回vector末尾元素的引用。  |
20| iterator | **Begin**()<br>返回非const类型的vector起始元素的迭代器。  |
21| const_iterator | **Begin**() const<br>返回const类型的vector起始元素的迭代器。  |
22| size_t | **Capacity**() const<br>返回在分配新的存储空间之前能存储的元素总数。  |
23| void | **Clear**()<br>清空vector.  |
24| TYPE* | **EditArray**()<br>返回一个指向vector的第一个元素的非const指针,用于访问vector的元素。  |
25| TYPE& | **EditItemAt**(size_t index)<br>返回vector的`index`对应的元素值。  |
26| iterator | **End**()<br>返回非const类型的vector末尾元素的迭代器。  |
27| const_iterator | **End**() const<br>返回const类型的vector末尾元素的迭代器。  |
28| iterator | **Erase**(size_t index)<br>如果`index`小于vector的size,就删除`index`处的元素。  |
29| const TYPE& | **Front**() const<br>返回vector起始元素的引用。  |
30| ssize_t | **IndexOf**(const TYPE& item) const<br>查找vector中元素值为`item`的索引。  |
31| bool | **IsEmpty**() const<br>返回vector是否为空。  |
32| size_t | **Merge**(const SortedVector< TYPE, AllowDuplicate >& sortedVector) |
33| size_t | **Merge**(const std::vector< TYPE >& invec)<br>将`invec`合并到`vec_`中。  |
34| const TYPE& | **MirrorItemAt**(ssize_t index) const<br>返回vector的元素值。  |
35| SortedVector< TYPE, AllowDuplicate >& | **operator=**(const SortedVector< TYPE, false >& rhs)<br>拷贝赋值运算符。  |
36| SortedVector< TYPE, AllowDuplicate >& | **operator=**(const SortedVector< TYPE, true >& rhs) |
37| const TYPE& | **operator[]**(size_t index) const<br>根据输入的索引去访问vector的元素。  |
38| size_t | **OrderOf**(const TYPE& item) const<br>查找应插入这个值为`item`的位置。  |
39| void | **PopBack**()<br>删除vector的最后一个元素。  |
40| ssize_t | **SetCapcity**(size_t size)<br>设置vector的capacity为`size`。  |
41| size_t | **Size**() const<br>返回vector的元素个数。  |
42
43## 使用示例
44
451. 示例代码(伪代码)
46
47```c++
48#include <iostream>
49#include "../include/sorted_vector.h"
50
51using namespace OHOS;
52using namespace std;
53
54constexpr int SIZE = 4;
55
56int main()
57{
58    vector<int> vec;
59    for (int i = 0; i < SIZE; i++) {
60        vec.push_back(i);
61    }
62
63    SortedVector<int, false> sv(vec);
64
65    vector<int> newVec;
66    newVec.push_back(7);
67    newVec.push_back(4);
68    newVec.push_back(3);
69    newVec.push_back(5);
70    newVec.push_back(6);
71
72    sv.Merge(newVec);
73
74    for (vector<int>::iterator it = sv.Begin(); it != sv.End(); it++) {
75        cout << "Merged result: " << *it << endl;
76    }
77
78    sv.Clear();
79    cout << "Cleared size: " << sv.Size() << endl;
80}
81```
82
832. 测试用例编译运行方法
84
85- 测试用例代码参见base/test/unittest/common/utils_sorted_vector_test.cpp
86
87- 使用开发者自测试框架,使用方法参见:[开发自测试执行框架-测试用例执行](https://gitee.com/openharmony/testfwk_developer_test#%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E6%89%A7%E8%A1%8C)
88
89- 使用以下具体命令以运行`sorted_vector.h`对应测试用例
90
91```bash
92run -t UT -tp utils -ts UtilsSortedVectorTest
93```