30/09/2018, 17:13
cài đặt một mảng động một chiều
#include "stdafx.h"
#include "iostream"
using namespace std;
template <class T>
class Array{
protected:
T *data; // con tro tro vao phan tu dau tien cua mang
int size; // kich thuoc mang
public:
Array():data(NULL), size(0){}
Array(int length): data(new T[size = length]){} // ham tao Array voi leng phan tu
Array(const Array &a): data(new T[size = a.size]){
CopyFrom(a.data);
}
~Array(){
if(data) {delete[]data;}
}
public:
void CopyFrom(T *value){
for(register int i = 0; i < size; i++){
data[i] = value[i];
}
} // ham copy data tu mang dau vao
int Size(){return size;} // ham lay kich thuoc cua Array
public:
T & operator[](int index){return data[index];}
Array& operator=(const Array& a){
delete[]data;
data = new T [size = a.data];
CopyFrom(a.data);
return *this;
}
};
class IntArray : public Array<int> {
int isSorted;
public:
IntArray(int *v, int n) {
Array<int>(n);
for(int i = 0; i < n; i++) {
data[i] = v[i];
}
isSorted = 0;
}
public:
void Sort() {
int minIndex, tmp;
for (int i=0; i<size-1; i++) {
minIndex = i;
for (int j = i+1; j<size; j++) {
if (data[j] < data[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
tmp = data[i];
data[i] = data[minIndex];
data[minIndex] = tmp;
}
}
isSorted = 1;
}
int Sum() {
int result = 0;
for(int i=0; i<size; i++) {
result += data[i];
}
return result;
}
int Search(int value) {
Sort();
int left=0, right=size-1;
int middle;
do {
middle=(left+right)/2;
if (value == data[middle]) break;
else if (value<data[ middle ]) {
right=middle-1;
}
else left=middle+1;
} while (left<=right);
if (left<=right) return middle;
return -1;
}
//class IntArray : public Array<int>{
// int isSorted; // co xac dinh mang da sap xep hay chua
//public:
// IntArray(int *v, int n); // ham tao tu mang int co n phan tu
// void Sort(); // ham sap xep theo thuat toan chen
// int Sum(); //ham tinh tong cac phan tu cua mang
// int Search(int value); //ham tim vi tri cua value trong mang bang thuat toan chia doi
float Average() {
return (float)Sum()/size;
}
};
template <class T>
int main()
{
int A[] = {4, 2, 3, 1};
IntArray arr(A, 4);
cout << arr.Sum() << ' ' << arr.Average() << endl; //10 2.5
cout << (arr.Search(5) >=0? "C": "khong C") << "0 gia tri 5 trong mang." << endl;
cout << (arr.Search(3) >=0? "C": "khong C") << "0 gia tri 3 trong mang." << endl;
system("pause");
}
Bài liên quan
lỗi gì ạ?
=== 20 ===
Và code này làm gì nữa? Muốn mọi người giúp thì phải đặt cái tiêu đề rõ ràng là mình đang làm cái gì. Đừng hỏi thế này.