C ++中的copy_if ...有麻烦

时间:2017-11-13 09:14:22

标签: c++

我正在尝试在我的程序中使用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一起使用但是problay我错过了一些东西,因为我正在使用指针。

1 个答案:

答案 0 :(得分:2)

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

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

现在用指针算法计算位置。请记住,这样的谓词只适用于连续存储:c阵列,std::arraystd::vector