使用 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 或其他东西,只要它是一个广泛使用的库),那么我将接受一个答案,该答案提供了不存在此类解决方案的令人信服的证据。
原文由 Velizar Hristov 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你使用向量(你应该使用 C++),你可以这样做:
对于数组,您必须确保将数组预分配到正确的大小: