仅供参考:我是编程新手。
我有10
0
,哨兵价值为[1 2 3]
。
我的原始数组是[0 0 0 0 0 0 0 3 2 1]
(用户输入),但反过来是[3 2 1
。
我需要帮助来制作我的反向数组 int temp;
for (int i = 0; i < arraysize/2; i++)
{
temp = array[arraysize-1-i];
array[arraysize - i - 1] = array[i];
array[i] = temp;
}
cout << "The reverse array: ";
for (int i = 0; i < arraysize; i++)
cout << array[i]<< ' ';
cout << endl;
]。
这是我的代码:
{{1}}
答案 0 :(得分:4)
只需使用标准库算法
auto end = std::find(std::begin(array),std::end(array),0);
std::reverse(std::begin(array),end);
//And if you only want to print the non-zero values:
size_t effectiveArraySize = end - std::begin(array);
如果固定大小的数组不是您的要求的一部分,您应该将您的用户数据放在一个自动增长的向量中,而不是使用可能变得太小的数组:
std::vector<int> v;
while(true) {
int t;
cin >> t;
if (t == 0) {
break;
}
v.push_back(t);
}
std::reverse(v.begin(),v.end());
这样,你的数组/向量中就没有任何标记值。
答案 1 :(得分:1)
注意:使用STL(std::reverse
和std::find
)中的相应功能更好,我只是猜测你必须自己实现它。
第一步:编写正确的反向功能。一个接收(指针)开头以及(指针)应该反转的范围结束。
第二步:编写一个函数来查找你的哨兵在阵列中的(第一个位置)(再次通过开头和结尾给出)
第三步:连接两个:从开头到你的哨兵的位置反转。
没有模板的示例:
void reverse(int * from, int * to) {
while ((to - from) > 1) {
--to;
int temp = *from;
*from = *to;
*to = temp;
++from;
}
}
int const * find(int const * from,
int const * const to,
int const value) {
while ((from != to) && (*from != value)) {
++from;
}
return from;
}
void reverse_until (int * const from,
int * const to,
int const sentinel) {
int const * const position_sentinel = find(from, to, sentinel);
reverse(from, from + (position_sentinel - from));
// return the sentinel position from this function
// if you want only the reversed part
}
经过测试:
int main() {
int test[10];
for (size_t i = 0; i < 10; ++i) {
test [i] = i + 1;
}
reverse_until (test, test + 10, 6);
copy(test, test + 10, ostream_iterator<int>{cout, " "});
return 0;
}
答案 2 :(得分:-1)
在执行反向操作之前,您需要找到数组的实际长度,然后将该长度用于所有进一步的操作。
像这样:
int actualArraySize = 0;
while(actualArraySize < arraysize && array[actualArraySize]!=0)
{
actualArraySize++;
}
int temp;
for (int i = 0; i < actualArraySize/2; i++)
{
temp = array[actualArraySize-1-i];
array[actualArraySize - i - 1] = array[i];
array[i] = temp;
}
cout << "The reverse array: ";
for (int i = 0; i < actualArraySize; i++)
cout << array[i]<< ' ';
cout << endl;
请注意,actualArraySize
可能小于或等于arraysize
,但不超过while(actualArraySize < arraysize && array[actualArraySize]!=0)
,因为0
中的条件,这意味着当import numpy as np
import cv2
params = np.zeros([1, 2]) # init params
s_img = np.zeros((512, 512, 3), np.uint8)
window_name = 'img'
def main():
global s_img
img = np.ones([512, 512, 3]) * 255
s_img = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)
cv2.startWindowThread()
cv2.imshow(window_name, s_img)
print ('Click corners to determine the field')
cv2.setMouseCallback(window_name, on_mouse, None)
while True:
k = cv2.waitKey(0) & 0xFF
if k == 27:
break # destroy window
def on_mouse(event, x, y, flag, param):
global s_img
if event == cv2.EVENT_LBUTTONDOWN:
print ('here')
cv2.circle(s_img, (x, y), 100, (255, 0, 0), -1)
cv2.imshow(window_name, s_img)
if __name__ == '__main__':
main()
时停止找到{1}}或达到数组的大小。