【问题标题】:C++: Implementing Row Iterator for TableC++:为表实现行迭代器
【发布时间】:2011-09-28 10:35:54
【问题描述】:

我有一个用 C++ 实现的通用表类,它使用shared_ptr< ptr_vector< vector<T> > > 作为其支持,其中T 是任意类型名; ptr_vector 包含指向与表中的列相对应的向量的指针。我决定将ptr_vector 包装在shared_ptr 中,因为这些表可能包含数百万行,而vectors 包含ptr_vector 中每一列的数据,原因相同。 (请告诉我这是否可以改进。)

在此表上实现按列操作很简单,因为我可以访问向量提供的本机迭代器。但是,我还需要表支持逐行操作:应该支持相对普通的操作,例如添加和删除行,以及对表使用 STL 算法的能力。现在,我遇到了一些需要帮助解决的设计问题:

  1. 似乎需要实现自定义迭代器来执行逐行操作才能完成上述操作。 boost::iterator_adaptor 是做这件事的正确方法吗?
  2. 当用户向表中添加行时,我不希望将特定的数据结构强加给用户——我将如何做呢?我正在考虑接受迭代器作为 add_row() 方法的参数。
  3. 如果您认为我应该以不同的方式实现此表结构,我愿意接受您对我提出的任何建议。它最初的设计目的是存储从包含数十万行条目的制表符分隔文件中读取的字符串。

非常感谢您的帮助!

【问题讨论】:

  • 表格的大小是固定的还是需要两个维度的插入和擦除操作?
  • 表格应该能够在两个维度上收缩或扩大。
  • 哎呀。我几乎想知道使用单个 vector<T> 作为底层容器并通过两组自定义迭代器(行和列)实现相关的跨步操作是否最有效。
  • 使用单个 vector<T> 作为底层容器怎么可能?我也许可以使用 `vector >',但这基本上就是我现在正在做的事情。
  • 也许你会发现Boost.multi_array很有用。

标签: c++ memory-management iterator


【解决方案1】:

Boost 库有一个名为multi_array 的容器,它提供了可以沿每个维度访问和操作的 n 维动态数组。这似乎与您正在尝试构建的非常相似,也许您可​​以使用它来代替?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多