初始化自定义数组类而不创建副本

2024-02-23

我编写了一个自定义数组容器,就像大多数 C++ 库一样,包括std::array and std::iterator不适用于目标(嵌入)。模板类基本上按预期工作。
但是我没有设法设置一个构造函数,它可以初始化整个数组而不创建副本。我尝试了几种构造函数,包括通过引用传递。显示的将创建一个副本,如果传递的数组的大小与我的类的大小不匹配,则会出现问题。

该环境支持最高 C++11 的语言功能,但没有可用的 std 库。因此,答案类似的问题 https://stackoverflow.com/questions/26391745/custom-array-class-constructor-for-initialization-of-list无法使用。

模板类的源代码:

template<typename T, typename sizetype, sizetype SIZE>
class mArray
{
private:
    T _elements[SIZE]; ///< Array of SIZE elements of Type T
    static_assert( SIZE > 0, "Size must be > 0"); // Discourage empty array
public:
    mArray(){};
    mArray(T initArr[SIZE])
    {
        sizetype index = 0;
        for (auto element : _elements)
        {
            _elements[index] = initArr[index]; //
            ++index;
        }
    }
    T* begin()
    {
        return &_elements[0]; // Pointer to first _element
    }
    T* end()
    {
        return &_elements[SIZE]; // Pointer behind last _elements
    }
    T front()
    {
        return _elements[0]; // Return first element of _elements
    }
    T back()
    {
        return _elements[SIZE-1]; // Return last element of _elements
    }
    T at(sizetype pos)
    {
        static_assert( pos > SIZE, "pos must be < SIZE");
        return _elements[pos];
    }
    T operator[](sizetype pos)
    {
        return _elements[pos];
    }
    T* data()
    {
        return *_elements;
    }
    sizetype size()
    {
        return SIZE;
    }
};

如何改进构造函数以避免创建副本?


完成此操作的方式涉及聚合初始化。如果您尝试获取一个数组并从中进行复制,那当然需要副本。但是,如果您传递了一个初始值设定项列表,那么您只需要制作elements公众并与std::array syntax:

template<typename T, typename sizetype, sizetype SIZE>
class mArray {
 public:
  T elements_[SIZE];
  static_assert( SIZE > 0, "Size must be > 0");
  T operator[](sizetype pos) { // you sure about this?
    return elements_[pos];
  }

  // other member functions
};

int main() {
  mArray<int, std::size_t, 10> arr{{1, 3, 5, 7}};
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初始化自定义数组类而不创建副本 的相关文章

随机推荐

  • 开发自定义锁屏[重复]

    这个问题在这里已经有答案了 我想开发看起来像 iPhone 锁屏的自定义锁屏应用程序 有这方面的教程或示例吗 如果没有 我应该从哪里开始 Android SDK 不支持创建 自定义锁屏 aap 您只能在自定义固件中修改锁屏行为 UPDATE
  • .so、.la 和 .a 库文件有什么区别?

    我知道一个 so文件是一种动态库 许多线程可以共享此类库 因此不需要在内存中拥有多个副本 但有什么区别 a and la 这些都是静态库吗 如果动态库比静态库有很大优势 为什么仍然有很多静态库 我什么时候应该尝试将代码构建到 so or a
  • PrimeNG 表:如何开始单元格编辑?

    我有一个 PrimeNG p 表 其中包含许多列和行 其中一列使用输入作为其单元格编辑器 精简版如下
  • 构建时出现 Docker 文件非零代码 100 错误

    这是我的 Docker 文件 FROM ubuntu 16 04 MAINTAINER Alexandre Savio lt gt RUN ln snf bin bash bin sh ARG DEBIAN FRONTEND noninte
  • 当系统显示当前正在进程中使用用户时,如何删除Linux中的用户[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试删除我在 ubuntu 上创建的用户 但是 当我使用以下命令时 userdel r cafe fixer 我收到以下消息 use
  • ProgressDialog 未显示在 AsyncTask 中

    我正在创建一个 Android 应用程序 该应用程序依赖于该应用程序从数据库获取的数据 为了获取这些数据 我有以下类 此类从数据库中以 JSON 格式获取数据 对其进行翻译并返回 public class Json public Strin
  • 允许对易失性对象进行优化

    From ISO IEC 9899 201x部分5 1 2 3 程序执行段落4 在抽象机中 所有表达式都按以下指定的方式求值 语义 实际的实现不需要评估一部分 表达式 如果它可以推断出它的值没有被使用并且没有 产生所需的副作用 包括任何由以
  • cppcheck 的规则集

    cppcheck允许你创建自己的规则文件 但我不知道cppcheck的功能暴露了多少 是否有人正在开发一套可以强制执行的JSF http www stroustrup com JSF AV rules pdf or MISRA http w
  • 在任务管理器之间均匀分配 Flink 运算符

    我正在 15 台机器的裸机集群上构建 Flink 流应用程序原型 我使用带有 90 个任务槽 15x6 的纱线模式 该应用程序从单个 Kafka 主题读取数据 Kafka主题有15个分区 所以我也将源算子的并行度设置为15 但是 我发现 F
  • 如何知道 MediaRecorder 何时完成将数据写入文件

    在进行实际录制之前 我们使用 MediaRecorder 使用 setOutputFile 将视频录制到外部存储上的文件中 一切正常 但主要问题是 录制完成后 我们希望开始在 VideoView 中播放录制的视频 如何知道文件何时可以读取和
  • CasperJS 无法设置 window.navigator 对象

    尝试使用 CasperJS 抓取网页 网页检查浏览器是否为 IE 6 7 使用 casperjs 传递 userAgent 似乎不满足其条件 UserAgent 通过 Mozilla 4 0 兼容 MSIE 6 0 Windows NT 5
  • Django Admin + FORCE_SCRIPT_NAME + 登录重定向不正确

    我让 Django 在 Nginx 后面运行fastcgi pass 我在子路径上运行 Django 例如 django sample location django sample include fastcgi params fastcg
  • 导入带有外键的 csv

    假设我有 2 个表 学生和团体 Group 表有 2 列 id GroupName Student 表有 3 列 id StudentName 和 GroupID GroupID 是 Group 字段的外键 我需要从 CSV 导入 学生 表
  • 需要来自 MySql 数据库的日期块数组

    好的 我有一个包含 StartDate 和 EndDate 的行的数据库表 我需要做的是从中返回消耗的时间块 例如 如果我有 3 行 如下所示 RowID StartDate EndDate 1 2011 01 01 2011 02 01
  • 自动加载 Word 任务窗格 Office 加载项

    我们正在为内部组织文档开发 Word 任务窗格 Office 加载项 不是 VSTO 在 Word 2013 桌面版 中 当我们插入加载项并保存文档时 当我们重新打开该文档时 加载项会自动加载 在 Word Online 中 此行为有所不同
  • Sklearn KNeighborsRegressor 自定义距离度量

    我正在使用 KNeighborsRegressor 但我想将它与自定义距离函数一起使用 我的训练集是 pandas DataFrame 如下所示 week day hour minute temp humidity 0 1 9 0 1 1
  • ubuntu 中的 php GD 库错误

    我正在使用 ubuntu 11 04 当我打开终端并输入时php a它显示一些像这样的错误 PHP Warning PHP Startup Unable to load dynamic library usr lib php5 200906
  • 在 PHP 的扩展类中使用父变量

    我有两门课 主课和扩展课 我需要在扩展类中使用主变量 我能做谁呢 无效例如
  • 如何以编程方式获取 Android 中应用程序花费的时间

    我想获取我今天使用过的所有应用程序的使用时间 当我通过拨打电话获取这些详细信息时 4636 但我希望在 android 中以编程方式获得这些详细信息 请帮我解决这个问题 我们可以看到这些 Play 商店应用程序如何显示使用情况统计信息 具有
  • 初始化自定义数组类而不创建副本

    我编写了一个自定义数组容器 就像大多数 C 库一样 包括std array and std iterator不适用于目标 嵌入 模板类基本上按预期工作 但是我没有设法设置一个构造函数 它可以初始化整个数组而不创建副本 我尝试了几种构造函数