2创建头文件

This commit is contained in:
iridiumR 2021-10-07 23:29:11 +08:00
parent 5df32f1eab
commit 207d6fe1e4
1 changed files with 160 additions and 0 deletions

160
ex2/vector.h Normal file
View 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]);
}