C++語言編程技巧:給定一個數,如何在數組中查找與之相鄰的數值

2021-01-11 編碼那些事

在編寫測試測量類的儀器軟體時,一些需要用戶輸入的參數,這些參數可能只能取一些離散的數值,如頻譜儀軟體中設置解析度帶寬時,可能只能取{1、2、5、10、20、50、100}裡面的數值,這時需要將用戶輸入的1-100之內的任意數值要規整為這個數組裡面的值。如當用戶輸入8、30、50時,假設向上規整的話,程序裡面應該將其規整為10、50、50三個數值。

在C/C++語言裡面實現這個功能,上面的問題實際上可以轉化為,對於一個給定的數值,如何在一個已知的離散數組中向上查找與之相鄰的元素數值。

C++語言中的實現方法

比較簡單的方法,可以藉助於C++標準庫中的函數「lower_bound」來實現。

該函數的意義是,在first和last中的前閉後開區間進行二分查找,返回大於或等於val的第一個元素位置。如果所有元素都小於val,則返回last的位置。

對於上面的問題,其C++語言的實現代碼如下:

代碼簡要解釋如下:

第1-2行,包含的頭文件,lower_bound需要包含algorithm文件。

第7-14行,定義x數組,並在控制項臺程序中列印每個元素的值。

第17-19行,調用lower_bound函數,分別查找與a、b、c三個數值相鄰的值。其返回的是指向查找到的元素的指針。

第20-22行,列印出查找到元素的值。

其運行結果如下圖所示:

從運行結果可看出,對於要查找的數值8、30、50,可以正確找到與之相鄰的數組中的值,分別為10、50、50三個數值。

說明

與「lower_bound」函數類似的,C++標準庫中還提供了另一個函數「upper_bound」,其意義是,在first和last中的前閉後開區間進行二分查找,返回大於val的第一個元素位置。如果所有元素都小於val,則返回last的位置。

可以通過下面的例子看一下這兩個函數的區別:

程序運行結果如下圖所示:

在數組y中,lower_bound函數返回的是第一個大於等於30的值,所以位置是2,對應的值是30。而upper_bound函數返回的是第一個大於30的值,所以位置是5,對應的值是40。

另外,例子使用的編譯環境是VC6.0。

如果你覺得這篇文章對你有用的話,請不要忘記點讚哦。

相關焦點

  • 對於一個給定的數組,如何隨機獲得它的元素 - VBA語言專家
    第三節 對於一個給定的數組,隨機獲得它的元素在前兩節中,我們講了隨機數的基本知識,這些看似我們實際工作的場景利用不大,這講的內容就接近我們實際的工作場景了。我們有沒有一個辦法建立一個函數,用於取得指定個數的隨機數數組呢?當然可以,我們可以先建立一個數組,這個數組有最大和最小值的限制,然後通過輸入參數來決定返回的隨機數個數,這樣我們在利用的時候就會非常的方便了。
  • C語言編程技巧:以實例跟我學動態數組的創建及使用方法
    問題提出在C語言編程中,對於普通數組的定義,如定義一個包含10個int類型元素的一維數組a,我們採用下面的方式:int a[10];這種方式定義的數組是靜態數組,其特點是定義方便,無需管理其內存的佔用情況,但其缺點是一旦定義後,其數組的長度就固定了,而不能動態的改變其大小
  • C語言編程技巧:跟我學如何定義及使用一個字符串數組
    實現目的我們在用C語言編寫程序時,經常會遇到使用字符串數組的情況,這種數組的特點是, 數組中的每個元素都是一個字符串,但每個字符串的長度卻不相同。如果你使用C++語言進行編程的話,實現起來相對比較簡單,只需直接選擇標準模板庫的字符串string類,在代碼中定義該類的一個數組即可實現。現在的問題是,在純C語言中如何定義這樣的一個字符串數組呢?如對於下面的一個字符串數組:str = {「I love C.」,「I love C++.」,「I love JAVA.」
  • C/C++編程筆記:如何在C++中列印數組參數大小?趕緊補課
    今天1024,先祝大家程式設計師節快樂,以後成為了程式設計師可不要天天加班喲~今天呢,筆者就來教你一招,如何計算函數中數組參數的大小?如何在函數中找到數組的大小?我們可以傳遞「對數組的引用」。我給你一個提示。希望能夠幫到你哦~另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
  • 程式語言之用最少的刪除操作,讓數組的所有元素相同
    給定n個元素的數組,以便元素可以重複。我們可以從數組中刪除任意數量的元素。任務是找到要從數組中刪除的元素的最小數量,以使其相等。例子:輸入: arr [] = {4,3,4,4,2,4}輸出: 2從數組中刪除
  • C語言編程技巧:控制臺程序中自定義函數實現數組內容的特定顯示
    在用C語言編寫算法調試方面的程序中,經常會遇到這種情況,在不同地方需要對處理後的數組內容多次進行顯示,並且很多情況下並非顯示數組裡面的全部內容,而僅僅是想觀察數組中的部分數據內容,若每次顯示時都用printf函數寫的話,未免太過麻煩了。
  • LabVIEW編程實例:生成隨機字符串並查找某字符出現的次數及位置
    實例說明使用LabVIEW程式語言,編寫一個VI程序,要求如下:能夠生成指定長度的a-z之間的隨機字符串能夠查找某個字符在字符串中出現的次數及位置實現後的軟體運行界面如下圖所示:編程思路對於第一個問題,要求生成
  • 在多個工作表中查找用戶需求的某個給定值
    大家好,我們今日講解「如何在多個工作表中查找某個給定值」,這節內容是「VBA信息獲取與處理」教程中第四個專題「EXCEL工作表數據的讀取、回填和查找」的第六節。第六節 如何在多個工作表中查找某個給定值大家好,我們今天講這個專題的最後一講,如何在多個工作表中查找某個給定值,當然要求這個給定的值在一個工作表中要是單一的值,如果是多個值我們可以稍微改一下代碼即可,我們不再做詳細講解。
  • 二維數組中的查找(劍指 Offer 題解Java版)
    二維數組中的查找題目連結題目描述解題思路4. 二維數組中的查找題目連結牛客網https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?
  • C++語言基礎——數組
    我們知道在C++中如何定義變量,假如我們需要100個變量,那應該怎麼做?這個時候,聰明的人類就想到了數組這樣一個神奇的東西。所謂數組,其實就是一組數,即把多個變量一起定義出來。我們先來介紹第一種數組:一維數組一維數組我們可以這樣定義:int a[10]; 這樣就代表可以儲存10個數的數組,相當於定義了10個變量。
  • R語言中數組的使用
    在R語言中,可以認為數組是矩陣的擴展,它將矩陣擴展到2維以上。如果給定的數組是1維的則相當於向量,2維的相當於矩陣。R語言中的數組元素的類型也是單一的,可以是數值型,邏輯型,字符型或複數型等。數組的創建在R語言中,數組使用array()函數創建。
  • C語言編程:以實例教你如何在控制臺程序中模擬一個選項菜單功能
    這兒通過一個例子給大家介紹在控制臺程序中,如何添加一個模擬選項菜單,通過選項菜單實現重複執行某段程序,並在控制臺中列印顯示結果的方法。例子說明程序開始運行時,在控制臺中顯示出當前程序的所有功能選項,通過讓用戶輸入不同的數字來選擇不同的功能。
  • Python學習第112課——numpy中數組查找元素和改變元素的小技巧
    【每天幾分鐘,從零入門python編程的世界!】上節我們學習了如何利用index找到ndarray數組中的一些元素,並把找到的元素生成一個新的ndarray。代碼如下:現在我們學習幾個用index找到ndarray中元素的小技巧。
  • 軟體開發者的終極夢想:揭秘谷歌編程面試
    問題陳述:給定一個排好序的數字數組和2個整數——K、X,在數組中找到K個最接近X的數。返回排序後的數字。X不一定出現在數組中。2.求數據流中第K大的元素。問題陳述:設計一個類,在數據流中高效地找到第k大的元素。
  • 「首席架構師推薦」數值分析軟體列表
    ML.NET是一個c#程式語言的自由軟體機器學習庫NAG Library 是一個廣泛的軟體庫,為各種編程環境高度優化的數值分析例程。Euler Mathematical Toolbox是一個強大的數字實驗室與程式語言,可以處理實數,複數和區間數,向量和矩陣。它可以生成2D/3D的圖形。FEATool Multiphysics是一個用於有限元和PDE多物理仿真的Matlab GUI工具箱。
  • C/C++編程筆記:同樣是數據類型,鍊表對比數組,哪個更好?
    就是說你想在程序中用數組,就要先定義數組,寫一個說明語句放在執行語句之前。我們的變量都是先定義後使用的嘛,在這個說明語句的部分,數組的長度已經被判死刑了。在後續操作中,我們既無法對已分配的存儲單元進行擴充或者更變,也不能通過編程的方式對沒有充分利用的資源進行回收,這就是所謂的靜態分配。
  • 生成給定範圍不重複的隨機數,go語言的極簡方法
    生成給定範圍的不重複隨機數這種需求相信程序猿小夥伴們都遇到過,具體需求是生成a到b之間n個不重複的隨機數,最容易想到的方法是生成隨機數存到數組裡,之後生成的隨機數和之前生成的進行比較,不存在就保存進數組,這種方法效率低不說,代碼寫起來也比較繁瑣,還有一種方案就是先生成a到b之間連續的數組,再用隨機數作為下標取數組裡的元素,取到一個元素就從數組中刪除,這樣下一次就要重新計算數組長度再取隨機下標,
  • C++模板元編程實戰:模板型模板參數與容器模板
    3容器模板學習任何一門程序設計語言之初,我們通常會首先了解該語言所支持的基本數據類型,比如C++中使用nt表示帶符號的整數。在此基礎上,我們會對基本數據類型進行一次很自然地擴展:討論如何使用數組。與之類似,如果將數值、類型、模板看成元函數的操作數,那麼前文所討論的就是以單個元素為輸入的元函數。
  • [探討]如何創建比C語言更快的程式語言?
    Fortran語義稱函數參數從未有過別名(alias ),Fortran中單獨有數組類型,而在C中,數組實質上是指針。這就是為什麼Fortran經常比C更快的原因以及為什麼依然要在Fortran中編譯數值庫的原因,當然它還涉及到指針算法的成本問題。因此,想要創建一門比C更快的語言應該提供更容易被編譯器處理的別名機制。
  • 算法究兮——有序數組中的單一元素
    題目:給定一個只包含整數的有序數組,每個元素都會出現兩次,唯有一個數只會出現一次,找出這個數。示例 1:輸入: [1,1,2,3,3,4,4,8,8]輸出: 2示例 2:輸入: [3,3,7,7,10,11,11]輸出: 10注意: 您的方案應該在 O(log n)時間複雜度和 O(1)空間複雜度中運行。