所以這是一個簡單的程式,它只在一個陣列中搜索兩個數字,總和為某個值k
#include <iostream>
#include <bits/stdc .h>
using namespace std;
int main()
{
unordered_set<int> hashtable;
int k =7;
int arr[5] = {1, 2, 3, 4, 5};
int s = sizeof(arr);
for (int i =0; i<s; i ){
if( hashtable.find(k - arr[i])!= hashtable.end() )
{
cout << arr[i] << endl;
cout<< "found one " << arr[i] << " and "<< k-arr[i]<< endl;
} else {
hashtable.insert(arr[i]);
}
}
return 0;
}
這是輸出,我得到了
4
found one 4 and 3
5
found one 5 and 2
7
found one 7 and 0
7
found one 7 and 0
我錯過了什么嗎?
uj5u.com熱心網友回復:
您可以在其邊界之外訪問陣列。程式的行為是未定義的。
sizeof不產生陣列中元素的數量。它以位元組為單位產生物件的大小。當元素的大小超過一個位元組時——并且int在大多數系統上超過一個位元組——那么陣列中的位元組數大于元素的數量。
獲取陣列中元素數量的正確方法是使用std::size:
int s = std::size(arr);
uj5u.com熱心網友回復:
由于您只使用arr[i]而不是i自身,因此您可以撰寫for (auto a : arr). 這將尊重陣列邊界,您不需要計算最大索引。因此,它避免了錯誤的計算(其他答案已修復)
uj5u.com熱心網友回復:
也許還有其他方法可以獲取陣列的大小,但現在可以這樣做:
int s = sizeof(arr)/sizeof(arr[0]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/435730.html
下一篇:我的排序中如何有第三個條件?
