最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中檢查vector是否包含給定元素的幾種方式詳解

 更新時(shí)間:2020年09月10日 10:42:31   作者:luoyayun361  
這篇文章主要介紹了C++中檢查vector是否包含給定元素的幾種方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

概述

在編碼中經(jīng)常會(huì)遇到一種場(chǎng)景,就是要在數(shù)組或列表中查找某個(gè)元素是否存在,其實(shí)對(duì)于這種線性操作,自己實(shí)現(xiàn)一個(gè)循環(huán)來(lái)檢查是非常簡(jiǎn)單的事情,那既然這樣,為啥還要專門寫(xiě)篇博客來(lái)分享呢?
一個(gè)最重要的原因就是我們?cè)揪涂梢杂酶?jiǎn)潔直觀高效的方式去替代手寫(xiě)for循環(huán),這個(gè)方式就是使用C++標(biāo)準(zhǔn)庫(kù)函數(shù)。

再啰嗦幾句。
通常在面試的時(shí)候,為了考察面試者的編碼功底,會(huì)讓其從頭實(shí)現(xiàn)某些基礎(chǔ)的算法,但是在實(shí)際開(kāi)發(fā)中,很多東西都有現(xiàn)成的封裝。只有把語(yǔ)言、標(biāo)準(zhǔn)庫(kù)“雙劍合璧”才能算是真正的C++。而且據(jù)C++標(biāo)準(zhǔn)委員會(huì)的安排,今后C++也會(huì)更側(cè)重于擴(kuò)充庫(kù)而不是擴(kuò)充語(yǔ)言,可見(jiàn)其分量的輕重了。

總之,C++標(biāo)準(zhǔn)庫(kù)是一個(gè)非常強(qiáng)大的東東,并且實(shí)現(xiàn)這些標(biāo)準(zhǔn)庫(kù)的人都是些非常牛逼的頂級(jí)程序員,性能都是最優(yōu)的。所以不要總想著所有事情都親力親為的去寫(xiě)一遍,既浪費(fèi)時(shí)間,寫(xiě)出來(lái)的東西可能還很菜。那么,這里就通過(guò)一些簡(jiǎn)單的示例來(lái)演示如何通過(guò)標(biāo)準(zhǔn)庫(kù)函數(shù)來(lái)實(shí)現(xiàn)。

正文

如何檢查vector中是否包含給定元素。

std::count

最簡(jiǎn)單的方式是對(duì)vector中的指定元素進(jìn)行計(jì)數(shù),如果count不為零,表示該元素存在,那么std::count可以很容易實(shí)現(xiàn)。

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
	std::vector<int> v = { 1, 20, 2, 6, 3, 7 };
	int key = 6;

	if (std::count(v.begin(), v.end(), key))
		std::cout << "Element found";
	else
		std::cout << "Element not found";

	return 0;
}

std::find

相比第一種方式,std::find()算法能夠更快速的查找給定范圍內(nèi)的值,因?yàn)閟td::count()會(huì)變量整個(gè)容器以獲得元素計(jì)數(shù),而find()在找到匹配元素后就立即停止搜索。

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
	std::vector<int> v = { 1, 20, 2, 6, 3, 7 };
	int key = 6;

	if (std::find(v.begin(), v.end(), key) != v.end())
		std::cout << "Element found";
	else
		std::cout << "Element not found";

	return 0;
}

std::find_if

和find相似的還有一個(gè)叫 std::find_if()算法,如果查找需要滿足某些條件,那么推薦使用該方法。這里我們可以結(jié)合lambda來(lái)使用,非常簡(jiǎn)潔。

比如,要查找列表中是否有元素能被5整除

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
  auto lst = {1,4,9,5,11};
  if(std::find_if(lst.begin(),lst.end(),[](auto v){
    if(v%5 ==0)
      return true;
    else
      return false;
  }) != lst.end()){
    std::cout << "Element found";
  }
  else{
    std::cout << "Element not found";
  }
  return 0;
}

C++ 11 - std::any_of

該算法與std::find_if相似,但不是返回滿足條件的的序列中第一個(gè)元素的迭代器,而是如果任何元素滿足條件后返回true,否則返回false。

#include <iostream>
#include <vector>
#include <algorithm>

struct compare
{
	int key;
	compare(int const &i): key(i) { }

	bool operator()(int const &i)
	{
		return (i == key);
	}
};

int main()
{
	std::vector<int> v = { 4, 7, 5, 2, 6, 9 };
	int key = 6;

	if (std::any_of(v.begin(), v.end(), compare(key)))
		std::cout << "Element found";
	else
		std::cout << "Element not found";

	return 0;
}

或者直接修改find_of的案例:

int main()
{
  auto lst = {1,4,9,5,11};
  if(std::any_of(lst.begin(),lst.end(),[](int v){
    if(v%5 ==0)
      return true;
    else
      return false;
  })){
    std::cout << "Element found";
  }
  else{
    std::cout << "Element not found";
  }
  return 0;
}

C++ 11 - std::none_of

該算法剛好和any_of相反,如果給定的條件在范圍內(nèi)所有元素都返回false,則返回true,如果至少一個(gè)元素返回true,則返回false。

直接修改上述示例,將if條件改成“非”就可以了,不再贅述。

std::binary_search

最后一種方法,如果vector是有序的,那么可以考慮使用這種算法,如果在給定范圍內(nèi)找到元素,則返回true,否則返回false。該方式是采用二分法查找,時(shí)間復(fù)雜度為O(log(n)),速度比較快。

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
	std::vector<int> v = { 1, 2, 3, 4, 5, 6, 7 };
	int key = 4;

	if (std::binary_search(v.begin(), v.end(), key))
		std::cout << "Element found";
	else
		std::cout << "Element not found";

	return 0;
}

OK,以上所有方法都可以實(shí)現(xiàn)我們想要的結(jié)果,只是在不同情況下選擇一種自己喜歡的方式即可。

附:
C++接口文檔:https://en.cppreference.com/w/
C++算法庫(kù)介紹:https://en.cppreference.com/w/cpp/algorithm

到此這篇關(guān)于C++中檢查vector是否包含給定元素的幾種方式的文章就介紹到這了,更多相關(guān)C++檢查vector是否包含給定元素內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ 數(shù)據(jù)共享與保護(hù)

    C++ 數(shù)據(jù)共享與保護(hù)

    C++ 數(shù)據(jù)共享與保護(hù)的基本概念,包括標(biāo)識(shí)符的作用域與可見(jiàn)性,對(duì)象生存期,類數(shù)據(jù)的共享,類共享數(shù)據(jù)的保護(hù)。本篇文章就介紹C++ 數(shù)據(jù)共享與保護(hù),需要的朋友可以參考一下
    2021-10-10
  • 在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別

    在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別

    這篇文章主要介紹了在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別,本文通過(guò)代碼的實(shí)例和注釋的詳細(xì)的說(shuō)明了單引號(hào)和雙引號(hào)的概念與區(qū)別,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++超詳細(xì)講解模板的使用

    C++超詳細(xì)講解模板的使用

    這篇文章主要介紹了C++中模板(Template)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C語(yǔ)言中如何判斷質(zhì)數(shù)

    C語(yǔ)言中如何判斷質(zhì)數(shù)

    這篇文章主要介紹了C語(yǔ)言中的判斷質(zhì)數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • C++ 智能指針原理、使用與最佳實(shí)踐指南

    C++ 智能指針原理、使用與最佳實(shí)踐指南

    本文全面介紹了C++智能指針的使用,包括RAII思想、標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)、核心原理和實(shí)際問(wèn)題解決,重點(diǎn)講解了unique_ptr、shared_ptr和weak_ptr的使用場(chǎng)景、優(yōu)缺點(diǎn)及特殊資源管理,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Visual Studio 2022 Preview 使用 C++20 Module的詳細(xì)過(guò)程

    Visual Studio 2022 Preview 使用 C++20 Module的詳細(xì)過(guò)程

    這篇文章主要介紹了Visual Studio 2022 Preview 使用 C++20 Module的過(guò)程,本文通過(guò)項(xiàng)目分析實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • 深入解析C++中派生類的構(gòu)造函數(shù)

    深入解析C++中派生類的構(gòu)造函數(shù)

    這篇文章主要介紹了深入解析C++中派生類的構(gòu)造函數(shù),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • Qt中互斥鎖QMutex和QMutexLocker的使用

    Qt中互斥鎖QMutex和QMutexLocker的使用

    本文主要介紹了Qt中互斥鎖QMutex和QMutexLocker的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 快速了解Boost.Asio 的多線程模型

    快速了解Boost.Asio 的多線程模型

    這篇文章主要介紹了Boost.Asio 的多線程模型的相關(guān)知識(shí),文中代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • c語(yǔ)言 字符串的拼接和分割實(shí)例

    c語(yǔ)言 字符串的拼接和分割實(shí)例

    今天小編就為大家分享一篇c語(yǔ)言 字符串的拼接和分割實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12

最新評(píng)論

云安县| 鄂州市| 仁布县| 巴中市| 嘉祥县| 库车县| 山阳县| 瑞丽市| 正安县| 大埔县| 咸宁市| 洛阳市| 巴彦淖尔市| 余江县| 甘南县| 贡嘎县| 济阳县| 东城区| 清镇市| 集安市| 玉门市| 龙门县| 万荣县| 安徽省| 丽江市| 奇台县| 镇江市| 花垣县| 都匀市| 阿勒泰市| 河源市| 江阴市| 祁阳县| 湘潭市| 阿拉尔市| 南川市| 罗定市| 涡阳县| 丹棱县| 广宁县| 叙永县|