【问题标题】:Using basic arrays for compatibility使用基本数组以实现兼容性
【发布时间】:2020-08-10 09:22:40
【问题描述】:

想象一个库中的函数,它以数组作为参数,在他们自己的代码中,用户可以使用各种数组实现,有些会使用 std::vectors,有些会使用 std::array,有些会使用基本数组,有些甚至可能创建自己的类,我们不能满足每个用户。但是每种类型的数组都使用指针和大小(是否存储在某个地方,但已知),是否可以使用指针和大小(如果需要)作为参数来解决这个问题?

【问题讨论】:

  • some will use std::vectors, some will use std::array, some will use basic arrays, aa这就是为什么我们有iterator和所有algorithms都在迭代器上工作。

标签: c++ arrays


【解决方案1】:

可以使用指针和大小(如果需要)作为参数来解决这个问题吗?

是的。这是一直以来使用的典型 C-ish api,例如带有边界检查的字符串函数或 mem* 函数,如 memcpymemcmp 函数或 qsort 采用指针和元素计数等。

但是 C++ 看到并不是每个“数组”都必须是一个数组,所以 C++ 使用 iterators 抽象地传递可以“迭代”的东西的信息。每个std::vectorsstd::array 和“基本数组”都有自己的迭代器,所有algorithms 都是在考虑迭代器的情况下抽象编写的。因为迭代器被自定义操作符重载,所以你几乎可以做任何事情,比如 ex。 inserter 允许在元素到来时将它们放入向量中。

还有最近添加的ranges。范围反转了迭代器的语法,例如由内而外,并提供更简单、更安全的使用以及惊人而简单的功能。

【讨论】:

  • 这是否意味着如果我要创建我的 onw 数组,我应该为它实现迭代器和算法,以便我可以将它传递给不知道我自己数组的库中的任何函数?跨度>
  • 最好为您自己的类型提供迭代器,因为这样您就可以使用现有库中的现有算法和您自己的类型。如果标准库中的算法不足以满足您的需求,您可以实施新算法。做CustomArray arr; std::sort(arr.begin(), arr.end()); for (auto&& v : arr) [} 很有趣,不在乎CustomArray 是什么。
  • 我只知道 C 2 年,C++ 的方式要好得多。除了性能之外,所有这些函数调用都会大大降低程序的速度。
  • all those function calls must slow the program a lot 在通常情况下,没有函数调用,因为所有内容都是内联的,因为它们都是模板化的。在某些情况下,C++ 更快,因为 C++ 中没有函数调用,例如 ex。 std::sortqsort.
  • 为什么它是模板化的事实意味着它是内联的?为什么 STL 不能在编译时编译函数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多