我正在阅读这个主题 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);
关于c++ - 整数数组切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37103449/