#include<iostream> using namespace std; template<typename T> class Myarr { T * date; int size; public: Myarr() { date = NULL; size = 0; } ~Myarr() { if (date != NULL) { delete[] date; } } void add(T Add) { T * AddedArr = new T[size+1]; for (int i = 0; i < size; i++) { AddedArr[i] = date[i]; } AddedArr[size] = Add; delete[] date; date = AddedArr; this->size++; } void getArr(int i) { for (int i = 0; i < this->size; i++) cout<< date[i]<<endl; } int getsize() { return this->size; } }; int main() { int i=0; char ch; Myarr<int> arr; cin >> i; for (i = 0; i < 100; i++) { int j = 0; cin >> j; arr.add(j); if ((ch=getchar())=='\n') break; } arr.getArr(arr.getsize()); system("pause");c++重载<<
时间: 2024-03-20 15:44:36 浏览: 163
这段代码实现了一个可变长数组类 Myarr,可以通过 add 函数往数组中添加元素,通过 getArr 函数输出数组中的元素。其中使用了模板类,可以存储不同类型的数据。另外,使用了动态内存分配,可以根据需要动态增加数组的大小。该程序最后输出了添加的所有元素。
对于重载 << 运算符,需要在 Myarr 类中添加友元函数:
```
template<typename T>
class Myarr {
...
friend ostream& operator<<(ostream& os, const Myarr<T>& arr) {
for (int i = 0; i < arr.size; i++) {
os << arr.date[i] << " ";
}
return os;
}
};
```
这样就可以通过 cout << arr 的方式输出整个数组了。
相关问题
帮我手动实现这些头文件里所有的stl容器#include <iostream> #include <memory> #include <stack> #include <fstream> #include <vector> #include <cmath> #include <iomanip> #include <exception> #include <climits> #include <array> #include <cstdint> #include <string>
好的,以下是手动实现这些头文件里所有的STL容器的代码:
```
// iostream
namespace mystd {
class ostream {
public:
ostream& operator<<(const char* str) {
// 实现输出字符串的逻辑
return *this;
}
// 其他重载运算符和成员函数
};
static ostream cout;
}
// memory
namespace mystd {
template<typename T>
class allocator {
public:
using value_type = T;
// 实现分配和释放内存的函数
};
}
// stack
namespace mystd {
template<typename T, typename Container = mystd::vector<T>>
class stack {
public:
using value_type = T;
using container_type = Container;
// 实现栈的各种函数
};
}
// fstream
namespace mystd {
class filebuf {
public:
// 实现文件缓冲区相关函数
};
class ifstream {
public:
ifstream(const char* filename) {
// 实现打开文件的逻辑
}
// 实现读取文件的逻辑
};
class ofstream {
public:
ofstream(const char* filename) {
// 实现打开文件的逻辑
}
// 实现写入文件的逻辑
};
}
// vector
namespace mystd {
template<typename T, typename Allocator = mystd::allocator<T>>
class vector {
public:
using value_type = T;
using allocator_type = Allocator;
// 实现vector的各种函数
};
}
// cmath
namespace mystd {
double pow(double base, double exponent) {
// 实现求幂函数
}
// 其他数学函数的实现
}
// iomanip
namespace mystd {
class setprecision {
public:
setprecision(int n) {
// 实现设置输出精度的逻辑
}
// 其他重载运算符和成员函数
};
}
// exception
namespace mystd {
class exception {
public:
virtual const char* what() const noexcept {
return "Unknown exception";
}
};
}
// climits
namespace mystd {
constexpr int INT_MAX = 2147483647;
// 其他常量的定义
}
// array
namespace mystd {
template<typename T, std::size_t N>
class array {
public:
using value_type = T;
// 实现数组的各种函数
};
}
// cstdint
namespace mystd {
using int8_t = signed char;
using int16_t = short int;
using int32_t = int;
using int64_t = long long int;
// 其他数据类型的定义
}
// string
namespace mystd {
class string {
public:
// 实现字符串的各种函数
};
}
```
以上代码只是简单实现了各个STL容器的基本功能,具体实现方式和函数可能会有所不同,仅供参考。
#include<iostream> using namespace std; template<typename T> class Myarr { T * date; int size; public: Myarr() { date = NULL; size = 0; } ~Myarr() { if (date != NULL) { delete[] date; } } void add(T Add) { T * AddedArr = new T[size+1]; for (int i = 0; i < size; i++) { AddedArr[i] = date[i]; } AddedArr[size] = Add; delete[] date; date = AddedArr; this->size++; } void getArr(int i) { for (int i = 0; i < this->size; i++) cout<< date[i]<<endl; } int getsize() { return this->size; } }; int main() { int i=0; char ch; Myarr<int> arr; cin >> i; for (i = 0; i < 100; i++) { int j = 0; cin >> j; arr.add(j); if ((ch=getchar())=='\n') break; } arr.getArr(arr.getsize()); system("pause");c++重载<<运算符
C++ 重载 << 运算符可以让我们使用类似 cout 的方式输出 Myarr 对象的内容。实现方法是在 Myarr 类中定义一个友元函数,重载 << 运算符。下面是代码示例:
```
#include<iostream>
using namespace std;
template<typename T>
class Myarr {
T * date;
int size;
public:
Myarr() {
date = NULL;
size = 0;
}
~Myarr() {
if (date != NULL) {
delete[] date;
}
}
void add(T Add) {
T * AddedArr = new T[size+1];
for (int i = 0; i < size; i++) {
AddedArr[i] = date[i];
}
AddedArr[size] = Add;
delete[] date;
date = AddedArr;
this->size++;
}
void getArr(int i) {
for (int i = 0; i < this->size; i++)
cout<< date[i]<<endl;
}
int getsize() {
return this->size;
}
friend ostream& operator<<(ostream& os, const Myarr& arr) {
for (int i = 0; i < arr.size; i++) {
os << arr.date[i] << " ";
}
os << endl;
return os;
}
};
int main() {
int i=0;
char ch;
Myarr<int> arr;
cin >> i;
for (i = 0; i < 100; i++) {
int j = 0;
cin >> j;
arr.add(j);
if ((ch=getchar())=='\n') break;
}
cout << arr;
system("pause");
}
```
在 Myarr 类中,我们定义了一个友元函数 operator<<,它接受一个 ostream 对象和一个 Myarr 对象作为参数。在函数内部,我们可以直接访问 Myarr 类的私有成员,因为它是一个友元函数。然后,我们将 Myarr 对象的内容输出到 ostream 对象中,并返回该对象。在主函数中,我们可以直接使用 cout 来输出 Myarr 对象的内容,就像这样:
```
cout << arr;
```
这段代码将输出 Myarr 对象 arr 中的所有元素。
阅读全文