C++ 从数组中取出前 n 个元素

标签 c++ c++11 readability

使用 C++,我想创建一个仅包含另一个数组的前 n 个元素的数组。就像 Scala 中这样: val arrayTwo = arrayOne.take(n)

我知道我可以使用循环并逐个复制元素,但这比必要的要复杂得多,它占用了不必要的空间,并且这使得它的可读性较差。是否有一个简单、可读的函数可以根据给定的先前数组的前 n 个元素创建一个新数组?另外,我想从某个地方重用一个函数,而不是自己编写一个函数,因为我不想不必要地污染命名空间。只要需要 O(n) 时间,性能就不重要。

std::copy_n 看起来像它,但我无法让它工作,因为 std::back_inserter 由于某种原因不接受我的数组(我也尝试使用指针而不是数组,但仍然不起作用)。

这是我迄今为止最好的尝试。

#include <iostream>
#include <utility>
#include <algorithm>
#include <vector>
#include <iterator>
#include <stdio.h>
#include <math.h>

using std::pair;

int main() {
  pair<double, double> fabricatedPoints[] = { { 15.3, 12.9 }, { 88.6, 56.0 },
            { 0.4, 18.0 }, { 5.0, 3.13 }, { 2.46, 86.01 } };
  pair<double, double> points[] = {};
  std::copy_n(std::begin(fabricatedPoints), 3, std::back_inserter(points));
}

可以用copy_n来完成,也可以通过其他方式来完成,只要它可读,我不介意。如果库中不存在可读的解决方案(不一定是标准库 - 它也可能是 Boost 或其他东西,只要它是一个广泛使用的库),那么我将接受一个答案,该答案提供了不存在此类解决方案的令人信服的证据。

最佳答案

如果您使用 vector (而且您应该使用 C++),您可以这样做:

using std::vector;
vector<pair<double, double>> a{ {15.3, 12.9}, ...};
vector<pair<double, double>> b(a.begin(), a.begin() + 3);

对于数组,您必须确保将数组预先分配到正确的大小:

pair<double, double> b[3];
std::copy_n(a, 3, b);

关于C++ 从数组中取出前 n 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25839699/

相关文章:

c++ - 如何将 Boost.Log 重定向到文件

C++模板继承隐藏模板参数

javascript - 我应该如何处理多个依赖于订单的条件?

c++ - Noob问题: Includes in Netbeans + MinGW

c++ - 在 VS2010 中读取转储文件 64/32 位冲突

c++ - 在 C++ 线程之间共享数据容器的最佳方式是什么

c++ - if 子句中的自动赋值

Python 行太长,如何使其更具可读性?

java - 在多个类之间共享 Java 中的常量字符串好吗?

c++ - 条件堆栈变量