c++ - 整数数组切片

标签 c++ arrays

我正在阅读这个主题 Array slicing in c++接近我正在寻找的东西,但不完全是。我想从 int 数组中删除前 3 个元素。

我现在拥有的:

void shiftArray(int *arr, int size) {
    for (int i = 0; i < size - 3; i++) {
        arr[i] = arr[i + 3];
        arr[i + 3] = -1; // can't re size array so set them to -1
    }
}

我想要的:

int* shiftArray(int *arr, int size) { // return type can stay void if possible
    return arr[3::]; // python
}

是否可以使用非迭代方法将前三个元素移动到值为 -1 的末尾,并将其余元素向上移动以取代它们?

最佳答案

您可以使用 std::rotate 和 std::fill:

std::fill( std::rotate(arr, std::begin(arr) + 3, std::end(arr)), std::end(arr), -1);

http://coliru.stacked-crooked.com/a/b3e0557ee0481162

...但是,它不如 php 优雅 :-)

[编辑]

上面要求下面的 C++11 与旧的 C++ 标准版本兼容:

template<typename T, size_t n>
void left_shift(T (&arr)[n], size_t left_shift){
    assert(left_shift < n);
    std::fill( std::rotate(arr, arr + left_shift, arr + n), arr + n, -1);
}

left_shift(arr, 3);

http://coliru.stacked-crooked.com/a/c09c27e3ebd60952

关于c++ - 整数数组切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37103449/

相关文章:

c++ - 通过引用传递给模板函数

arrays - 在 ColdFusion 中使用 JSON 数据

javascript - 名称中包含空格的 JSON 调用数据数组

c++ - 在 C++ 中加密存档的方法

c++ - 向条件语句添加条件

javascript - 使用另一个数组元素进行数组解构

javascript - 通过递增计数将键编号分配给对象中的键

c++ - linux中uint32_t从4字节变为6字节

c++ - 由于 Qt3D 说支持 Linux,我应该如何处理 Linux 上缺少 window.h 的情况?

c++ - 可以在折叠表达式中使用子表达式吗?