在C++中构建数据库的原型

building prototype of a database in C++

本文关键字:原型 数据库 构建 C++      更新时间:2023-10-16

我正在尝试构建一个小型数据库的原型。首先将一些整数作为数据,并将它们的条件作为访问与否。条件最初是在迭代数据集时设置的。稍后我将更改一些条件(不在代码中)。

稍后使用名为"isVisited"的函数检查条件,代码如下 -

main.cpp
--------
#include <iostream>
#include <list>
#include "Data.h"
using namespace std;
int main ()
{
list<Data>* test = new list<Data>();
test->push_back(12);
test->push_back(13);
test->push_back(14);
for (list<Data>:: iterator it = test->begin(); it != test->end(); it++){
it->visited_data = false;
}
return 0;
}

Data.h
------
#ifndef DATA_H
#define DATA_H
class Data
{
public:
Data();
void isVisited(Data* data_);
bool visited_data;
};
#endif

Data.cpp
--------

#include <iostream>
#include <list>
#include "Data.h"
using namespace std;
Data::Data()
{
}
void Data::isVisited(Data* data_)
{
Data* _data = data_;
if (_data->isVisited){
cout<<"this data is visited"<<endl;
}
else
cout<<"this data is not visited"<<endl;
}

您有一个容器,它期待Data,但您int提供它。 您需要某种类型的转换运算符。 最简单的方法是为Data提供一个隐式构造函数,这需要int

class Data
{
public:
Data(int)
{
// this should do something "appropriate"
}
};

但是,从您到目前为止发布的代码来看,您期望如何处理您传递给数据集(test)的整数并不完全清楚,因为目前您没有存储数据集中保存的值,只有一个标志来指示它是否已被访问。

附带说明一下,std::list很少是最合适的数据结构,特别是如果您计划仅通过push_back()与它进行交互,就像您的示例中一样。 对于这种情况,首选std::vector.

另一方面,您的test对象正在泄漏。 无论如何,没有正当理由动态分配它,因此我将向您展示一些替代方案。

最首选的方法是创建具有自动存储持续时间的它,如下所示:

std::vector<Data> test;
test.push_back(12);
// ...

如果你觉得必须动态分配它,你应该把它包装在一个智能指针中。

std::unique_ptr<std::vector<Data>> test(new std::vector<Data>);
test->push_back(12);
// ...