gpt4 book ai didi

c++ - std::vector 已知序列

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:10 25 4
gpt4 key购买 nike

我正在尝试通过“C++ 方式”来学习 C++。我正在编写一个程序,其中我拥有所有这些已知值(在编译时)。这是我的问题:

在我的构造函数中,我想检查传递的值(int)是否是 2、4、8、16 或 32 之一,否则会抛出错误。我想过:

  1. 制作一个 C 风格的数组或整数
  2. 之前手动创建一个 vector 并通过它进行交互以检查
  3. 列出 list ?不过,我以前从未使用过列表。

我真正想做的是在单独的头文件中创建一个 const vector ,但这似乎不可能。

做这个检查最优雅的方法是什么?

同样,是否有任何方法可以在 header 中创建一个具有一定数量的已知值(在编译时)的 vector ?如果我能做到 const std::string a_str("a string"); 我不明白为什么我不能对 vector 使用类似的技术。

最佳答案

有什么问题:

if (!(n == 2 || n == 4 || n == 8 || n == 16 || n == 32))
{
// no!
}

如果您想要“C++ 方式”,静态数组应该可以,使用 find:

template <typename T, size_t N>
T* endof(T (&pArray)[N])
{
return &pArray[0] + N;
}

static const int OkNumbers[] = {2, 4, 8, 16, 32};
static const int* OkNumbersEnd = endof(OkNumbers);
if (std::find(OkNumbers, OkNumbersEnd, n) == OkNumbersEnd)
{
// no!
}

修改这个列表很简单,我猜编译器可能将它优化到我之前的答案。

关于c++ - std::vector 已知序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1918723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com