Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;链接列表中的访问冲突读取位置_C++_List - Fatal编程技术网

C++ C++;链接列表中的访问冲突读取位置

C++ C++;链接列表中的访问冲突读取位置,c++,list,C++,List,我最近一直在努力解决(问题的第二部分): 描述 谢谢你给我列的清单,我的想法更有条理! 不过我有一些问题,我想你可以帮我解决吗?>有时我在列表项中输入了错误的信息。也许为了防止这种情况,我可以修改/更新列表项?但这并不是唯一的问题,当有50多个项目时,我很难完成。你认为你可以添加对我的物品进行分类的功能吗?显然,如果我有,我也希望能够按类别查看! 哦,最后,你们中的一些人真的很棒,上次也这么做了,但有没有办法让我的列表保持状态,这样我就不必每次打开电脑时都重新键入? 最新的待办事项列表应具有以下

我最近一直在努力解决(问题的第二部分):

描述 谢谢你给我列的清单,我的想法更有条理! 不过我有一些问题,我想你可以帮我解决吗?>有时我在列表项中输入了错误的信息。也许为了防止这种情况,我可以修改/更新列表项?但这并不是唯一的问题,当有50多个项目时,我很难完成。你认为你可以添加对我的物品进行分类的功能吗?显然,如果我有,我也希望能够按类别查看! 哦,最后,你们中的一些人真的很棒,上次也这么做了,但有没有办法让我的列表保持状态,这样我就不必每次打开电脑时都重新键入? 最新的待办事项列表应具有以下功能: 修改现有列表项 能够为列表项指定类别。列表项应该能够接受任意数量的类别 按类别查看-所有列表项应能够按类别进行排序和输出,以便更轻松地浏览提交内容 保留状态 谢谢

正式投入和产出 输出说明 创建的任何输出都应该是用户友好的。当我查看我的待办事项列表时,我应该能够很容易地区分一个列表项和另一个列表项。 例子

(不要把它看得太字面,按你想的方式去做) 分类

输入: 类别输出

输入: 输出: ----程序设计---- -像素不是像素也不是像素 -Scheme编程语言 -C语言中的内存 -哈斯克尔音乐学院 -来自一行代码的算法交响曲

----音乐---- -民间音乐中的调式 -旋律小调音阶的使用 -哈斯克尔音乐学院 -来自一行代码的算法交响曲

----音乐与节目---- -哈斯克尔音乐学院 -来自一行代码的算法交响曲

修改项目

updateItem('在C中创建正弦波','在Python中创建正弦波'); //该项现在已从“在C中创建正弦波”更改为“在Python中创建正弦波”。这应该反映在您创建的viewList函数/方法中

我的错误是我得到了“访问冲突读取位置”。这是因为在我的
列表中
我在调试该列表的任何节点时意识到了这一点
数据=
,但在退出
ToDoList::addItem()之前(
数据=“洗澡”
(或任何数据必须等于的值)

我希望我正确地解释了我的问题

#include <iostream>
#include <string>
#include <vector>

template<class T>
struct Node
{
    T data;
    Node* next = nullptr;
    Node();
    Node(T item);
};

template<class T>
Node<T>::Node()
{ }

template<class T>
Node<T>::Node(T item) : data(item)
{ }

template<class T>
class List
{
    Node<std::string>* head;
    Node<std::string>* tail;
    int size;

public:
    List();
    ~List();

    void addItem(T item);
    void deleteItem(T item);
    void display() const;
};
template<class T>
List<T>::List() : size(0)
{
    head = new Node<std::string>();
    tail = head;
}

template<class T>
List<T>::~List()
{
    auto* temp = head;
    for (int i = 0; i < size; ++i){
        head = head->next;
        delete temp;

        temp = head;
    }
}a

template<class T>
void List<T>::addItem(T item)
{
    tail->data = item;
    tail = tail->next = new Node<std::string>;
    size++;
}

template<class T>
void List<T>::deleteItem(T item)
{
    auto* temp = head;
    for (int i = 0; i < size; ++i){
        if (temp->data == item){
            if (temp == head){
                auto* h2 = head->next;
                delete temp;
                temp = 0;
                head = h2;
            }

            else if (temp == tail){
                delete temp;
                temp = 0;
            }

            else{
                temp->data = temp->next->data;
                auto* te = temp->next->next;
                delete temp->next;
                temp->next = 0;
                temp->next = te;
            }

            --size;
            break;
        }

        temp = temp->next;
    }
}

template <class T>
void List<T>::display() const
{
    auto* temp = head;
    for (int i = 0; i < size; ++i)
    {
        std::cout << "- " << temp->data;
        temp = temp->next;
    }
}

class Category
{
    std::string name;
    List<std::string> list;

public:
    Category(std::string name);

    void addItemToCategory(std::string item);
    void doneItemInCategory(std::string item);
    void displayCategory() const;

    std::string getName() const;
};

Category::Category(std::string _name) : name(_name)
{ }

void Category::addItemToCategory(std::string item)
{
    list.addItem(item);
}

void Category::doneItemInCategory(std::string item)
{
    list.deleteItem(item);
}

void Category::displayCategory() const
{
    list.display();
}

std::string Category::getName() const
{
    return name; 
}

class ToDoList 
{
    std::vector<Category> categories;

public:
    ToDoList();

    void addItem(std::string item, std::string category);

    void viewList();
};

ToDoList::ToDoList()
{ }

void ToDoList::addItem(std::string item, std::string category)
{
    if (!categories.size()){
        Category newCategory(category);
        newCategory.addItemToCategory(item);

        categories.push_back(newCategory);
    }
    else{
        for (auto& cate : categories){
            if (cate.getName() == category){
                cate.addItemToCategory(item);
                return;
            }
        }

        Category newCategory(category);
        newCategory.addItemToCategory(item);

        categories.push_back(newCategory);
    }
}

void ToDoList::viewList()
{
    for (const auto& cate : categories){
        std::cout << "------" << cate.getName() << "------\n";
        cate.displayCategory();
    }
    std::cout << "\n" <<std::endl ;
}

int main()
{
    ToDoList list;

    list.addItem("Take a shower", "x");
    list.addItem("Go to work", "x");
    list.viewList();

    list.addItem("Buy a new phone", "y");
    list.viewList();

    std::cin.ignore(2);
}
#包括
#包括
#包括
模板
结构体类型
{
T数据;
Node*next=nullptr;
Node();
节点(T项);
};
模板
Node::Node()
{ }
模板
节点::节点(T项):数据(项)
{ }
模板
班级名单
{
节点*头;
节点*尾部;
整数大小;
公众:
List();
~List();
无效附加项(T项);
无效删除项(T项);
void display()常量;
};
模板
列表::列表():大小(0)
{
头=新节点();
尾=头;
}
模板
列表::~List()
{
自动*温度=磁头;
对于(int i=0;i下一步;
删除临时文件;
温度=水头;
}
}a
模板
无效列表::附加项(T项)
{
尾部->数据=项目;
tail=tail->next=新节点;
大小++;
}
模板
作废列表::删除项(T项)
{
自动*温度=磁头;
对于(int i=0;i数据==项目){
如果(温度==水头){
自动*h2=头部->下一步;
删除临时文件;
温度=0;
压头=h2;
}
否则如果(温度==尾部){
删除临时文件;
温度=0;
}
否则{
临时->数据=临时->下一步->数据;
自动*te=temp->next->next;
删除临时->下一步;
温度->下一步=0;
temp->next=te;
}
--大小;
打破
}
温度=温度->下一步;
}
}
模板
无效列表::display()常量
{
自动*温度=磁头;
对于(int i=0;istd::cout我建议您阅读有关的内容。基本上,通过为
列表定义析构函数,但不声明任何复制/移动构造函数,您已经通过
if (!categories.size()){
    Category newCategory(category);
    newCategory.addItemToCategory(item);

    categories.push_back(newCategory);
}