用C ++构建数据库原型

时间:2014-02-05 16:21:24

标签: c++ database pointers iterator

我正在尝试构建一个小型数据库的原型。首先将一些整数作为数据及其条件作为访问或不访问。最初在迭代数据集的时间设置条件。我稍后会改变一些条件(不在代码中)。

稍后使用名为'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;
    }

1 个答案:

答案 0 :(得分:1)

您有一个期待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);
// ...
相关问题