2创建头文件
This commit is contained in:
parent
5df32f1eab
commit
207d6fe1e4
1 changed files with 160 additions and 0 deletions
160
ex2/vector.h
Normal file
160
ex2/vector.h
Normal file
|
@ -0,0 +1,160 @@
|
|||
#ifndef _INC_STDIO
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
#ifndef _GLIBCXX_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
class Vec
|
||||
{
|
||||
private:
|
||||
int *v;
|
||||
int LEN;
|
||||
int USED;
|
||||
|
||||
void expand();
|
||||
|
||||
void shrink();
|
||||
|
||||
public:
|
||||
Vec(int len);
|
||||
|
||||
int get(int a);
|
||||
|
||||
void put(int a, int value);
|
||||
|
||||
void swap(int a, int b);
|
||||
|
||||
int insert(int locate, int value);
|
||||
|
||||
int del(int locate, int value);
|
||||
|
||||
int find(int value);
|
||||
|
||||
void printall();
|
||||
|
||||
int getlen();
|
||||
|
||||
int getused();
|
||||
};
|
||||
|
||||
Vec::Vec(int len)
|
||||
{
|
||||
LEN = len * 2;
|
||||
v = new int[LEN];
|
||||
USED = 9;
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
v[i] = i + 1;
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
swap(i, rand() % 10);
|
||||
}
|
||||
|
||||
int Vec::get(int a)
|
||||
{
|
||||
return v[a];
|
||||
}
|
||||
|
||||
void Vec::put(int a, int value)
|
||||
{
|
||||
v[a] = value;
|
||||
}
|
||||
|
||||
void Vec::swap(int a, int b)
|
||||
{
|
||||
int temp = v[a];
|
||||
v[a] = v[b];
|
||||
v[b] = temp;
|
||||
}
|
||||
|
||||
void Vec::expand()
|
||||
{
|
||||
LEN = LEN * 2;
|
||||
int *p = new int[LEN];
|
||||
|
||||
for (int i = 0; i <= USED; i++)
|
||||
p[i] = v[i];
|
||||
|
||||
delete[] v;
|
||||
v = p;
|
||||
}
|
||||
|
||||
void Vec::shrink()
|
||||
{
|
||||
LEN = LEN >> 1;
|
||||
int *p = new int[LEN];
|
||||
|
||||
for (int i = 0; i <= USED; i++)
|
||||
p[i] = v[i];
|
||||
|
||||
delete[] v;
|
||||
v = p;
|
||||
}
|
||||
|
||||
int Vec::insert(int locate, int value)
|
||||
{
|
||||
if (locate < 0 || locate > USED)
|
||||
return 1;
|
||||
|
||||
USED++;
|
||||
|
||||
if (USED >= LEN)
|
||||
expand();
|
||||
|
||||
for (int i = USED; i > locate; i--)
|
||||
v[i] = v[i - 1];
|
||||
|
||||
v[locate] = value;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Vec::del(int locate, int value)
|
||||
{
|
||||
|
||||
if (locate < 0 || ((USED - value) < 0) || ((locate + value - 1) > USED))
|
||||
return 1;
|
||||
|
||||
USED = USED - value;
|
||||
|
||||
for (int i = locate; i <= USED; i++)
|
||||
v[i] = v[i + value];
|
||||
|
||||
if (((double)USED / (double)LEN) <= 0.3)
|
||||
shrink();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Vec::find(int value)
|
||||
{
|
||||
int i = 0;
|
||||
for (i; i <= USED; i++)
|
||||
{
|
||||
if (v[i] == value)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
|
||||
}
|
||||
|
||||
int Vec::getlen()
|
||||
{
|
||||
return LEN;
|
||||
}
|
||||
|
||||
int Vec::getused()
|
||||
{
|
||||
return USED;
|
||||
}
|
||||
|
||||
void Vec::printall()
|
||||
{
|
||||
for (int i = 0; i < USED; i++)
|
||||
printf("%d\n", v[i]);
|
||||
}
|
Reference in a new issue