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

标签 c++ vector

我正在尝试通过“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/

相关文章:

c++ - 甚至调用函数之前的段错误

c++ - 为什么有些场景不需要 "std::"?

关于 vector 和 for/while 循环的 C++ 新手

c++ - 3 个共线点 - 一些错误

c++ - C 简单 RingBuffer - 多线程 - 查找关键部分

c++ - 监视 Active Directory 事件

c++ - 将 PIMPL 习惯用法与成员函数模板一起使用(事先不知道所有可能的数据类型)

C++ vector 访问元素

c++ - 创建大小元素的 vector ,而不调用复制构造函数?

c++ - 如何实现枚举类对象的二维 vector ?