# Đề tài: Vector

1. Thành viên mới
Ngày gia nhập
11 2021
Bài viết
2

## Vector

#include <bits/stdc++.h>
#include<iostream>
using namespace std;

template <typename T>
class Vector1
{
private:
int size; // bien luu do dai cua vector
int capacity; // bien luu dung luong cua vector
T *array; // tao con tro chua mang
void expand(int newCapacity); // ham tang dung luong vector
public:
Vector1(int initCapacity = 100); // ham tao vector
~Vector1(); // ham huy vector
Vector1 &operator=(Vector1 &rhs); // ham nap chong toan tu gan
int Size(); // ham tra ve kich thuoc
bool empty(); // ham kiem tra vector giong
T &operator[](int index); // ham nap chong toan tu truy cap chi so vector
void push_back(T newElement); // ham day phan tu vao cuoi vector
void pop_back(); // ham xoa phan tu cuoi vector
void insert(int pos, T newElement); // ham them phan tu vao vi tri pos
void erase(int pos); // ham xoa phan tu tai vi tri pos
void clearn(); // ham xoa tat ca cac phan tu vector
};

template <typename T>
void Vector1<T>::expand(int newCapacity)
{
if (newCapacity <= size)
return;

T * old = array; // old tro toi mang cu
array = new T[newCapacity]; // array tro toi mang moi

for (int i = 0; i < size; i++)
array[i] = old[i]; // sao chep phan tu tu mang cu sang mang moi

delete[] old; // xoa mang cu
capacity = newCapacity; // dat dung luong moi
}
template <typename T>
Vector1<T>::Vector1(int initCapacity = 100)
{
size = 0;
capacity = initCapacity;
array = new T[capacity];
}
template <typename T>
Vector1<T>::~Vector1()
{
delete[] array;
}
template <typename T>
Vector1 &operator=(Vector1 &rhs)
{
if (this != &rhs) // ngan can tu sao chep
{
delete[] array; // xoa mang hien tai
size = rhs.size; // dat kich thuoc moi
capacity = rhs.capacity; // dat dung luong moi
array = new T[capacity]; // tao mang moi

// Sao chep cac phan tu tu phai sang trai
for (int i = 0; i < size; i++)
array[i] = rhs.array[i];
}

return *this; // tra ve vector ve trai sau khi gan xong
}
template <typename T>
int Vector1<T>::Size()
{
return size;
}
template <typename T>
bool Vector1<T>::empty()
{
return (size == 0);
}

T & operator[](int index)
{
return array[index];
}
template <typename T>
void Vector1<T>::push_back(T newElement)
{
// Gap doi dung luong neu vector day
if (size == capacity)
expand(2 * size);

// Chen phan tu moi vao ngay sau phan tu cuoi cung
array[size] = newElement;

// Tang kich thuoc
size++;
}​
template <typename T>
void Vector1<T>::pop_back()
{
size--;
}​
template <typename T>
void Vector1<T>::insert(int pos, T newElement)
{
// Gap doi dung luong neu vector day
if (size == capacity)
expand(2 * size);

// Dich cac phan tu sang phai de tao cho trong cho viec chen
for (int i = size; i > pos; i--)
array[i] = array[i - 1];

// Dat phan tu moi vao vi tri chen
array[pos] = newElement;

// Tang kich thuoc
size++;
}
template <typename T>
void Vector1<T>::erase(int pos)
{
// Dich cac phan tu sang trai de lap day cho trong de lai do viec xoa
for (int i = pos; i < size - 1; i++)
array[i] = array[i + 1];

// Giam kich thuoc
size--;
}
template <typename T>
void Vector1<T>::clearn()
{
size = 0;
}

int main()
{
Vector1<int> a;
a.push_back(1);
a.push_back(2);
a.pop_back();
a.insert(0,2);
a.clearn();
return 0;
}

Mọi người ơi giúp em fix lỗi với ạ.
Lỗi như thế này ạ.
\Vector1.cpp:43:1: error: redeclaration of 'Vector1<T>::Vector1(int)' may not have default arguments [-fpermissive]
43 | Vector1<T>::Vector1(int initCapacity = 100)
| ^~~~~~~~~~
.\Vector1.cpp:55:1: error: invalid use of template-name 'Vector1' without an argument list
55 | Vector1 &operator=(Vector1 &rhs)
| ^~~~~~~
.\Vector1.cpp:55:1: note: class template argument deduction is only available with '-std=c++17' or '-std=gnu++17'
.\Vector1.cpp:6:7: note: 'template<class T> class Vector1' declared here
6 | class Vector1
| ^~~~~~~
.\Vector1.cpp:82:1: error: 'T' does not name a type
82 | T & operator[](int index)
| ^
.\Vector1.cpp:98:3: error: '\U0000200b' does not name a type
98 | }âm
|
.\Vector1.cpp:103:3: error: '\U0000200b' does not name a type
103 | }âm
|

2. C++ Code:
1. #include <bits/stdc++.h>
2. #include<iostream>
3. using namespace std;
4.
5. template <typename T>
6. class Vector1
7. {
8. private:
9.     int size; // bien luu do dai cua vector
10.     int capacity; // bien luu dung luong cua vector
11.     T *array; // tao con tro chua mang
12.     void expand(int newCapacity); // ham tang dung luong vector
13. public:
14.     Vector1(int initCapacity=100); // ham tao vector
15.     ~Vector1(); // ham huy vector
16.     Vector1 &operator=(const Vector1 &rhs); // ham nap chong toan tu gan
17.     int Size(); // ham tra ve kich thuoc
18.     bool empty(); // ham kiem tra vector giong
19.     T &operator[](int index); // ham nap chong toan tu truy cap chi so vector
20.     void push_back(T newElement); // ham day phan tu vao cuoi vector
21.     void pop_back(); // ham xoa phan tu cuoi vector
22.     void insert(int pos, T newElement); // ham them phan tu vao vi tri pos
23.     void erase(int pos); // ham xoa phan tu tai vi tri pos
24.     void clearn(); // ham xoa tat ca cac phan tu vector
25. };
26.
27. template <typename T>
28. void Vector1<T>::expand(int newCapacity)
29. {
30.     if (newCapacity <= size)
31.         return;
32.     T * old = array; // old tro toi mang cu
33.     array = new T[newCapacity]; // array tro toi mang moi
34.     for (int i = 0; i < size; i++)
35.         array[i] = old[i]; // sao chep phan tu tu mang cu sang mang moi
36.     delete[] old; // xoa mang cu
37.     capacity = newCapacity; // dat dung luong moi
38. }
39.
40. template <typename T>
41. Vector1<T>::Vector1(int initCapacity)
42. {
43.     size = 0;
44.     capacity = initCapacity;
45.     array = new T[capacity];
46. }
47.
48. template <typename T>
49. Vector1<T>::~Vector1()
50. {
51.     delete[] array;
52. }
53.
54. template <typename T>
55. Vector1<T> &Vector1<T>::operator=(const Vector1 &rhs)
56. {
57.     if (this != &rhs) // ngan can tu sao chep
58.     {
59.         delete[] array; // xoa mang hien tai
60.         size = rhs.size; // dat kich thuoc moi
61.         capacity = rhs.capacity; // dat dung luong moi
62.         array = new T[capacity]; // tao mang moi
63.
64.         // Sao chep cac phan tu tu phai sang trai
65.         for (int i = 0; i < size; i++)
66.             array[i] = rhs.array[i];
67.     }
68.     return *this; // tra ve vector ve trai sau khi gan xong
69. }
70.
71. template <typename T>
72. int Vector1<T>::Size()
73. {
74.     return size;
75. }
76.
77. template <typename T>
78. bool Vector1<T>::empty()
79. {
80.     return (size == 0);
81. }
82.
83. template <typename T>
84. T & Vector1<T>::operator[](int index)
85. {
86.     return array[index];
87. }
88.
89. template <typename T>
90. void Vector1<T>::push_back(T newElement)
91. {
92.     // Gap doi dung luong neu vector day
93.     if (size == capacity)
94.         expand(2 * size);
95.     // Chen phan tu moi vao ngay sau phan tu cuoi cung
96.     array[size] = newElement;
97.     // Tang kich thuoc
98.     size++;
99. }
100.
101. template <typename T>
102. void Vector1<T>::pop_back()
103. {
104.     size--;
105. }
106.
107. template <typename T>
108. void Vector1<T>::insert(int pos, T newElement)
109. {
110.     // Gap doi dung luong neu vector day
111.     if (size == capacity)
112.         expand(2 * size);
113.
114.     // Dich cac phan tu sang phai de tao cho trong cho viec chen
115.     for (int i = size; i > pos; i--)
116.         array[i] = array[i - 1];
117.
118.     // Dat phan tu moi vao vi tri chen
119.     array[pos] = newElement;
120.
121.     // Tang kich thuoc
122.     size++;
123. }
124.
125. template <typename T>
126. void Vector1<T>::erase(int pos)
127. {
128.     // Dich cac phan tu sang trai de lap day cho trong de lai do viec xoa
129.     for (int i = pos; i < size - 1; i++)
130.         array[i] = array[i + 1];
131.
132.     // Giam kich thuoc
133.     size--;
134. }
135.
136. template <typename T>
137. void Vector1<T>::clearn()
138. {
139.     size = 0;
140. }
141.
142. int main()
143. {
144.     Vector1<int> a;
145.     a.push_back(1);
146.     a.push_back(2);
147.     a.pop_back();
148.     a.insert(0,2);
149.     a.clearn();
150.     return 0;
151. }
.
.

3. Thành viên nhiệt tình
Ngày gia nhập
12 2015
Nơi ở
Đà Nẵng
Bài viết
621
Trong code trên của MHoang
Đã sửa dòng 41 thành
Vector1<T>::Vector1(int initCapacity)
Đã bỏ đi "= 100"
Có 1 lỗi logic ở dòng 30
Sao lại là newCapicity <= size
Phải là newCapacity <= capacity chứ
Đã được chỉnh sửa lần cuối bởi khoaph : 06-12-2021 lúc 02:41 PM.

4. Thành viên mới
Ngày gia nhập
11 2021
Bài viết
2
Dạ em cảm ơn.

#### Quyền hạn của bạn

• Bạn không thể gửi đề tài mới
• Bạn không thể gửi bài trả lời
• Bạn không thể gửi các đính kèm
• Bạn không thể chỉnh sửa bài viết của bạn