gpt4 book ai didi

c++ - C++ 中的 copy_if ……有问题

转载 作者:行者123 更新时间:2023-11-28 01:40:47 25 4
gpt4 key购买 nike

我正在尝试在我的程序中使用 copy_if。我想将一个数组的值每 3 个元素复制到另一个数组中。

基本上,我写了这样一个程序:

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main(int argc, char *argv[])
{
int16_t *array;
int16_t *new_array;

array = new int16_t[10]();
new_array = new int16_t[4]();

array[0] = 9;
array[1] = 1;
array[2] = 50;
array[3] = 30;
array[4] = 3;
array[5] = 24;
array[6] = 66;
array[7] = 73;
array[8] = 108;
array[9] = 10;

copy_if(array, array+9, new_array, [&] (const int& i) -> bool
{ size_t index = i -array[0]; return index % 3 == 0; });

for (int jj = 0; jj < 4; jj++) {
cout << "new_array[" << jj << "] = " << new_array[jj] << endl;
}
}

最终结果应该是这样的

new_array[0] = 9
new_array[1] = 30
new_array[2] = 66
new_array[3] = 10

但我得到:

new_array[0] = 9
new_array[1] = 30
new_array[2] = 24
new_array[3] = 66

我多次看到 copy_if 与 vector 一起使用,但可能因为我使用的是指针,所以我遗漏了一些东西。

最佳答案

i 是元素,而不是指向它的指针。您的谓词是错误的,因为它依赖于数组元素的值,而不是它们的位置。应该是:

size_t index = &i - &array[0]; return index % 3 == 0;

现在它用指针算法计算位置。请记住,这样的谓词只能用于连续存储:c 数组、std::arraystd::vector

关于c++ - C++ 中的 copy_if ……有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47260640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com