C ++如何使编号列表的大小与向量中的数量一样大

时间:2017-11-15 21:22:15

标签: c++ vector menu

我想为矢量的内容制作一个编号列表,根据矢量中有多少东西缩小或增加,因为用户可以随意添加或删除矢量中的内容。

在此项目中,用户可以从菜单中选择以编辑矢量1.添加书籍,2。显示矢量中所有书籍的列表,以及3.删除书籍。下面看到的功能是选项3,删除一本书。正如您所看到的,我已将'y'设置为被删除的用户选择,我现在需要的是一种在用户的编号列表中列出书籍(我的矢量bookCollection的内容)的方法。

int delBook(vector<string> *bookCollection)
{
    int y;
    for (vector<string>::iterator bIter = bookCollection->begin(); bIter < bookCollection->end(); bIter++)
    {
        if (bookCollection->at(y+1) == *bIter)
        {
            bookCollection->erase(bIter);
        }
    }
}

我希望删除选择在控制台中看起来像这样:

  1. “Book One”
  2. “Book Two”
  3. “Book Three”
  4. “第四册”

    输入您要删除的图书编号:“4”

  5. 但是可以根据向量中添加了多少字符串来缩小或增加,因此下次用户选择“3.删除书籍”时会显示:

    1. “Book One”
    2. “Book Two”
    3. “预订三”

      输入您要删除的图书编号:

    4. 我对编程仍然很陌生,所以请原谅我,如果这一切都没有意义,仍在学习语言。

1 个答案:

答案 0 :(得分:0)

有许多显示和处理菜单的方法。

这是一种表驱动方法:

struct Menu_Item
{
  const char * menu_text;
  void (*processing_function)(); // Pointer to processing function
};

void Process_Hello()
{
   std::cout << "Hello\n";
}

static const Menu_Entry menu_1[] =
{
  {"Print Hello", Process_Hello},
};
const size_t menu_1_item_count = 
sizeof(menu_1) / sizeof(menu_1[0]);

void Menu_Processor(Menu_Entry const * const p_menu,
                    size_t item_count)
{
  for (unsigned int i = 0; i < item_count; ++i)
  {
    std::cout << (i + 1) << p_menu[i].menu_text << "\n";
  }
  unsigned int selection;
  std::cin >> selection;
  // Process the selection:
  (p_menu[selection - 1])();
}

此方法很不错,因为您可以在不更改代码的情况下在表中插入或删除条目。它可以改进,但是这个展示了表驱动菜单系统的概念。