String类型
#include <iostream>
using namespace std;
class String
{
public:
String(const char *str = nullptr)
{
if (str != nullptr)
{
m_data = new char[strlen(str) + 1];
strcpy(m_data, str);
}
else
m_data = new char[1];
*m_data = '\0';
}
String(const String &other)
{
m_data = new char[strlen(other.m_data)+1];
strcpy(m_data, other.m_data);
}
~String(void)
{
delete[]m_data;
m_data = nullptr;
}
String& operator=(const String &other)
{
if (this == &other)
{
return *this;
}
delete[]other.m_data;
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data, other.m_data);
return *this;
}
private:
char *m_data;
};
int main()
{
String str1;
String str2("hello");
String str3 = "world";
String str4 = str3;
String str5(str3);
str1 = str2;
return 0;
}
循环队列
#include <iostream>
using namespace std;
class Queue
{
public:
Queue(int size = 10)
{
_pQue = new int[size];
_front = _rear = 0;
_size = size;
}
~Queue()
{
delete[]_pQue;
_pQue = nullptr;
}
Queue(const Queue &src)
{
_front = src._front;
_rear = src._rear;
_size = src._size;
_pQue = new int[_size];
int index = 0;
for (int i = _front; i != _rear; i = (i + 1) % _size)
{
_pQue[index++] = src._pQue[i];
}
}
Queue& operator=(const Queue &src)
{
if (this == &src)
{
return *this;
}
delete[]_pQue;
_front = src._front;
_rear = src._rear;
_size = src._size;
_pQue = new int[_size];
int index = 0;
for (int i = _front; i != _rear; i = (i + 1) % _size)
{
_pQue[index++] = src._pQue[i];
}
return *this;
}
void push(int val)
{
if (full())
{
resize();
}
_pQue[_rear] = val;
_rear = (_rear+1)%_size;
}
void pop()
{
if (empty())
{
return;
}
_front = (_front + 1) % _size;
}
int front()
{
return _pQue[_front];
}
bool full()
{
return (_rear + 1) % _size == _front;
}
bool empty()
{
return _rear == _front;
}
private:
int *_pQue;
int _front;
int _rear;
int _size;
void resize()
{
int *_ptm = new int[2 * _size];
int index = 0;
for (int i = _front; i != _rear; i = (i+1)%_size)
{
_ptm[index++] = _pQue[i];
}
delete[]_pQue;
_pQue = _ptm;
_size *= 2;
_front = 0;
_rear = index;
}
};
int main()
{
Queue s1;
Queue s2 = s1;
for (int i = 0; i < 20; ++i)
{
s2.push(rand() % 100);
}
while (!s2.empty())
{
cout << s2.front() << " ";
s2.pop();
}
cout << endl;
s2 = s1;
return 0;
}