我如何完全擦除数组并将其替换为矢量

How do i completely erase an array and replace it with a vector?

本文关键字:替换 何完全 擦除 数组      更新时间:2023-10-16

我已经为我的班级做了大约一天的作业,我已经完成了几乎所有的工作。我唯一缺少的是删除我的数组并用向量替换它。

#ifndef MENU
#define MENU
#include <vector>
const int MAXCOUNT = 20;
struct menuItem
{
    void(*func)();
    char decript[50];
};
class Menu
{
private:
    //vector <int> v;       i tried replacing the "mi"'s in the menu.cpp file with v.push_back but i kept getting pointer errors      
    menuItem mi[MAXCOUNT];      
    int count = 0;              
    void runSelection();
public:
    Menu();
    void addMenu(char *Description, void(*f)());
    void runMenu();
    void waitKey();
};
#endif

这是cpp文件。我试图用v代替数组mi,我知道我错过了一些东西,但我无法弄清楚,所以我只是发布它与数组工作。

 Menu::Menu()
    :count(0)
{
}
void Menu::addMenu(char *Description, void(*f)())
{
    if (count < MAXCOUNT)
    {
        this->mi[count].func = f;
        strcpy(this->mi[count].decript, Description);
        count++;
    }
}
void Menu::runMenu()
{
    for (;;)
    {
        system("CLS");
        for (int i = 0; i < count; i++)
        {
            cout << this->mi[i].decript << endl;
        }
        runSelection();
    }
}
void Menu::waitKey()
{
    cout << "Press any key to continue" << endl;
    while (!_kbhit());
    fflush(stdin);
}
void Menu::runSelection()
{
    int select;
    cin >> select;
    if (select <= count)
        this->mi[select - 1].func();
}

最简单的方法应该是替换

    menuItem mi[MAXCOUNT];     

   std::vector<menuItem> mi;

并在构造函数中正确初始化

Menu::Menu()
    :count(0)
    ,mi(MAXCOUNT)
{
}

假设您之前有工作代码,这应该可以无缝地替换原始数组。


在当前的c++标准中,您甚至可以简单地使用

   std::array<menuItem,MAXCOUNT> mi;

甚至不需要在构造函数中初始化