Dear sycc,
subarray is effectively a view of input_array.
I haven’t debugged your code, but check out the example below (it’s an image and not a general multi-dimensional array because it makes visualization easier):
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <vector>
int main() {
cv::Mat input_array(80, 80, CV_8UC3, cv::Scalar(255,0,0)); //3 channels, 80x80, completely blue
cv::imshow("", input_array);
cv::waitKey(0);
std::vector<cv::Range> ranges;
ranges.push_back(cv::Range::all());
ranges.push_back(cv::Range(0, 20));
cv::Mat subarray = input_array(ranges); //subarray is a view of the first 20 columns of the image
subarray = cv::Scalar(0, 255, 0); //change the color to green
cv::imshow("", input_array);
cv::waitKey(0);
subarray = subarray / 2; //halven the intensity of the green
cv::imshow("", input_array);
cv::waitKey(0);
return 0;
}