C++ 如何在C++;没有使用STL?
基本上,我必须在一个异构的集合中动态存储不同的电影,我已经有了不同的电影类型(纪录片和家庭)和“掩盖”差异的类(电影),所以它可以存储在一个地方(记录)。 我的addMovie(Movie*mov)功能有问题。我不知道怎么开始 我的唱片班:C++ 如何在C++;没有使用STL?,c++,class,dynamic-arrays,heterogeneous-array,C++,Class,Dynamic Arrays,Heterogeneous Array,基本上,我必须在一个异构的集合中动态存储不同的电影,我已经有了不同的电影类型(纪录片和家庭)和“掩盖”差异的类(电影),所以它可以存储在一个地方(记录)。 我的addMovie(Movie*mov)功能有问题。我不知道怎么开始 我的唱片班: class Record { String name; size_t siz; Movie* movies; Record(const R
class Record {
String name;
size_t siz;
Movie* movies;
Record(const Record&);
Record& operator=(const Record&);
public:
Record(String n): name(n), siz(0) {movies = new Movie[siz+1];}
void addMovie (Movie *mov);
void removeMovie (Movie *mov);
void listMovies();
void searchMovie (const char* title);
void emptyRecord();
void writeFile();
void readFile();
virtual ~Record() {emptyRecord();}
};
电影类:
class Movie {
protected:
String name;
String release;
String genre;
public:
Movie(){}
Movie(String n, String r, String g): name(n), release(r), genre(g) {}
virtual void write() {}
virtual ~Movie() {}
};
documental类:(family类类似,它存储int age_限制,write函数写入该限制)
(注:如果您有任何关于动态异构存储的好来源,我洗耳恭听)要求不太明确,但对于在单个容器中存储异构数据,我建议使用std::tuple()。让我知道这是不是你想要的;) 编辑:没有STL的可能解决方案
#include <iostream>
using namespace std;
class Base {
};
class A : public Base {
};
class B : public Base {
};
int main(){
const size_t arraySize = 10;
Base* array[arraySize];
//allocate
array[0] = new A();
array[1] = new B();
// ...some more stuff here
//dispose
for (Base* ptr : array) {
if (ptr != nullptr) {
delete ptr;
ptr = nullptr;
}
}
}
#包括
使用名称空间std;
阶级基础{
};
A类:公共基地{
};
B类:公共基地{
};
int main(){
const size\u t arraySize=10;
基*数组[阵列化];
//分配
数组[0]=新的A();
数组[1]=新的B();
//……这里还有一些东西
//处置
用于(基本*ptr:阵列){
如果(ptr!=nullptr){
删除ptr;
ptr=nullptr;
}
}
}
要求不是很明确,但对于在单个容器中存储异构数据,我建议使用std::tuple()。让我知道这是不是你想要的;)
编辑:没有STL的可能解决方案
#include <iostream>
using namespace std;
class Base {
};
class A : public Base {
};
class B : public Base {
};
int main(){
const size_t arraySize = 10;
Base* array[arraySize];
//allocate
array[0] = new A();
array[1] = new B();
// ...some more stuff here
//dispose
for (Base* ptr : array) {
if (ptr != nullptr) {
delete ptr;
ptr = nullptr;
}
}
}
#包括
使用名称空间std;
阶级基础{
};
A类:公共基地{
};
B类:公共基地{
};
int main(){
const size\u t arraySize=10;
基*数组[阵列化];
//分配
数组[0]=新的A();
数组[1]=新的B();
//……这里还有一些东西
//处置
用于(基本*ptr:阵列){
如果(ptr!=nullptr){
删除ptr;
ptr=nullptr;
}
}
}
我需要在不使用任何STL的情况下编写它:/。基本上,我的record类应该动态存储电影,而电影可以是不同的类型(我的示例是Documental类)。我的addMovie函数获取一个指向电影的指针,然后将其添加到记录中。哦,对不起,我错过了编辑!尽管问题是我需要在添加新内容时增加容器的大小。我需要增加容器的大小--创建您自己的向量类。既然你不能使用STL,那么你就有责任创建你本来可以使用的任何类。如果你是学生,你的任务是模仿STL vector类的功能,那么你有3个选项:1。(最简单的解决方案)复制粘贴实际的vector实现:D 2。在插入和3时实现阵列重新分配。实现链表实现。在任何一种情况下,你都有可能得到一个糟糕的分数,因为你的老师肯定会指出,在速度/记忆方面总是有一个权衡。是的,还有第四个选项,您可以尝试deque实现,这是一种链表和向量的混合,两者都有优点和缺点。祝你好运我需要在不使用任何STL:/的情况下编写它。基本上,我的record类应该动态存储电影,而电影可以是不同的类型(我的示例是Documental类)。我的addMovie函数获取一个指向电影的指针,然后将其添加到记录中。哦,对不起,我错过了编辑!尽管问题是我需要在添加新内容时增加容器的大小。我需要增加容器的大小--创建您自己的向量类。既然你不能使用STL,那么你就有责任创建你本来可以使用的任何类。如果你是学生,你的任务是模仿STL vector类的功能,那么你有3个选项:1。(最简单的解决方案)复制粘贴实际的vector实现:D 2。在插入和3时实现阵列重新分配。实现链表实现。在任何一种情况下,你都有可能得到一个糟糕的分数,因为你的老师肯定会指出,在速度/记忆方面总是有一个权衡。是的,还有第四个选项,您可以尝试deque实现,这是一种链表和向量的混合,两者都有优点和缺点。祝你好运不使用std/STL作为需求,主要是因为如何实现(简单的)std类等效。您已经对字符串执行了操作。似乎您还需要std::vector
,可能还需要类似的智能指针。不使用std/STL作为需求,主要是因为如何实现(简单的)等价的std类。您已经对字符串执行了操作。您似乎还需要std::vector
,可能还需要智能指针。