-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmy_vector.cpp
More file actions
118 lines (114 loc) · 2.69 KB
/
Copy pathmy_vector.cpp
File metadata and controls
118 lines (114 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// ConsoleApplication6.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <iostream>
#include <initializer_list>
#include<string>
template<typename T>
class my_vector {
private:
T *data = nullptr;
int size;
int cap;
public:
my_vector(int si, T num = 0) :data(new T[2 * si]), size(si), cap(2 * si) {
for (int i = 0; i < size; i++)
data[i] = num;
}
my_vector(std::initializer_list<T> l) :data(new T[2 * l.size()]), size(l.size()), cap(2 * l.size()) {
auto tem = l.begin();
for (int i = 0; i < size; i++)
{
data[i] = *tem;
tem++;
}
}
~my_vector() {
delete data;
}
my_vector(const my_vector& a) {
this->size = a.size;
this->cap = a.cap;
if(this->data!=nullptr)
{
delete this->data;
this->data = new T[a.cap];
for (int i = 0; i < a.size; i++)
this->data[i] = a.data[i];
}
}
//修改器
my_vector &push_back(T new_num) {
if (++size > cap)
{
cap = 2 * size;
T *tem = new T[size];
for (int i = 0; i < size; i++)
tem[i] = data[i];
delete data;
data = new T[cap];
for (int i = 0; i < size; i++)
data[i] = tem[i];
delete tem;
}
data[size - 1] = new_num;
return *this;
}
my_vector &clear() {
size = 0;
return *this;
}
my_vector &insert(T* pos,T d) {
size++;
for (auto a = pos+1; a < end(); a++)
*a = *(a - 1);
*pos = d;
return *this;
}
void check(int i) { //检查是否越界
if (i >= size)
throw -1;
}
//访问器
T operator[](int i) {
check(i);
return data[i];
}
T& at(int i) {
check(i);
return data[i];
}
T& front(){
return data[0];
}
T& back() {
return data[size - 1];
}
int get_size() {
return this->size;
}
//迭代器
T *begin() {
return &data[0];
}
T *end() {
return &data[size];
}
};
int main()
{
my_vector<int> vec{2,3};
vec.push_back(6);
vec.insert(vec.end()-1, 5);
for (int i = 0; i < vec.get_size(); i++)
std::cout << vec[i] << std::endl;
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门提示:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件