【问题标题】:C++ Builder 2009 - Simple List of IntsC++ Builder 2009 - 简单的整数列表
【发布时间】:2014-02-07 16:50:08
【问题描述】:

来自 Java,我习惯于内置数据结构,我可以快速/轻松地引用它,让我可以做一些事情,比如将整数添加到列表中并检查整数是否在列表中。

由于这似乎很常见,我希望看看 C++ Builder 的简单方法是什么。我也可以使用标准 C++ 库,只要它可以与 C++ Builder 一起使用。

【问题讨论】:

  • 查看所有标准容器:en.cppreference.com/w/cpp/container 根据具体任务,每个容器都有优缺点。在您的情况下,您似乎想要一个(多)集或无序_(多)集。标准库必须与每个 c++ 编译器一起使用。
  • 我忘记了,因为您似乎使用的是旧编译器 (2009),那些标记为 C++11 的容器将不可用,包括 unordered_(multi)set。

标签: c++ list c++builder c++builder-2009


【解决方案1】:

您可以使用std::vectorstd::set。如果要允许重复,请使用vector,如果不允许,请使用 set。与set 相比,搜索vector 的速度也会明显变慢。

std::vector<int> intCheckList;
std::set<int> intCheckSet;

【讨论】:

  • 我遇到了客户支持问题,但我会调查一下。一旦我验证,然后我会接受它是否有效。谢谢
【解决方案2】:

mattingly890 的建议对我有用,这只是一个跟进,以举例说明我如何使用该套装,作为其他人的参考。下面是一些关于我如何插入集合并测试该值是否在集合中的示例代码。确保顶部有#include &lt;set&gt;

// Test std set
std::set<int> myset;
std::set<int>::iterator it;
myset.insert(10);
myset.insert(20);
myset.insert(30);

it = myset.find(10);
boolean found = it!=myset.end();
if(found)
    MessageDlg("Found 10", mtInformation, TMsgDlgButtons() << mbOK, 0);

it = myset.find(15);
found = it!=myset.end();
if(found)
    MessageDlg("Found 15", mtInformation, TMsgDlgButtons() << mbOK, 0);

it = myset.find(20);
found = it!=myset.end();
if(found)
    MessageDlg("Found 20", mtInformation, TMsgDlgButtons() << mbOK, 0);

参考资料:

【讨论】:

  • boolean 在 c++ 中应该是 bool,还有 set::count() 将返回 01 而不是像 find 这样的迭代器。这将为您节省针对 end() 的测试,您可以直接将其用作 if 条件。
猜你喜欢
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多