欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++ map索引不存在的key可能導(dǎo)致的后果分析

 更新時(shí)間:2020年12月14日 16:46:19   作者:魚竿釣魚干  
這篇文章主要介紹了c++ map索引不存在的key可能導(dǎo)致的后果分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

今天調(diào)這個(gè)調(diào)了很久才發(fā)現(xiàn)這個(gè)問題,所以記錄以下
測試代碼

#include<bits/stdc++.h>
using namespace std;

int main()
{
	map<int,int>mp_int;
	map<string,string>mp_string;
	map<char,char>mp_char;
	mp_int[1]=10;
	string a="abc",b="xzy",c="def";
	mp_string[a]=b;
	mp_char['a']='b';
	cout<<"正常索引"<<endl; 
	for(auto &i:mp_int)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_string)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_char)cout<<i.first<<" "<<i.second<<endl;
	
	cout<<"訪問不存在的鍵"<<endl;
	cout<<mp_int[2]<<endl<<mp_string[c]<<endl<<mp_char['c']<<endl;
	
	cout<<"變化"<<endl;
	for(auto &i:mp_int)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_string)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_char)cout<<i.first<<" "<<i.second<<endl;
	
	return 0;
}

OUT PUT

正常索引
1 10
abc xzy
a b
訪問不存在的鍵
0
變化
1 10
2 0
abc xzy
def
a b
c

可以發(fā)現(xiàn)不存在的key在被索引后被添加到了map中并被賦予了一個(gè)默認(rèn)值(一般的,整數(shù)為0,字符,字符串為空)

需要注意的是,只要發(fā)生了索引,就會(huì)導(dǎo)致如上錯(cuò)誤,即使他們在if語句里

#include<bits/stdc++.h>
using namespace std;

int main()
{
	map<int,int>mp_int;
	map<string,string>mp_string;
	map<char,char>mp_char;
	mp_int[1]=10;
	string a="abc",b="xzy",c="def";
	mp_string[a]=b;
	mp_char['a']='b';
	cout<<"正常索引"<<endl; 
	for(auto &i:mp_int)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_string)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_char)cout<<i.first<<" "<<i.second<<endl;
	
	cout<<"訪問不存在的鍵"<<endl;
	if(mp_int[2]);
	if(mp_string[c]==a);
	if(mp_char['c']);
	
	cout<<"變化"<<endl;
	for(auto &i:mp_int)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_string)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_char)cout<<i.first<<" "<<i.second<<endl;
	
	return 0;
}

上面的代碼會(huì)產(chǎn)生同樣的結(jié)果

當(dāng)你想要再次使用(循環(huán))這些鍵的時(shí)候就會(huì)出錯(cuò),你會(huì)使用到實(shí)際并不存在的key

避免方法是在索引前使用find或者count來判斷鍵是否存在

到此這篇關(guān)于c++ map索引不存在的key可能導(dǎo)致的后果分析的文章就介紹到這了,更多相關(guān)c++ map索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Visual Studio 2022 的安裝和創(chuàng)建C++項(xiàng)目(圖文教程)

    Visual Studio 2022 的安裝和創(chuàng)建C++項(xiàng)目(圖文教程)

    本文主要介紹了Visual Studio 2022 的安裝和創(chuàng)建C++項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++浮點(diǎn)型的存儲(chǔ)方式詳解

    C++浮點(diǎn)型的存儲(chǔ)方式詳解

    本篇文章是對C/C++浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下,希望能夠給你帶來幫助
    2021-09-09
  • C++ Boost shared_ptr共享指針詳細(xì)講解

    C++ Boost shared_ptr共享指針詳細(xì)講解

    shared_ptr是一個(gè)標(biāo)準(zhǔn)的共享所有權(quán)的智能指針,允許多個(gè)指針指向同一個(gè)對象,定義在memory文件中,命名空間為std,這篇文章主要介紹了C++ shared_ptr使用,需要的朋友可以參考下
    2022-11-11
  • C語言中全局?jǐn)?shù)組和局部數(shù)組的問題

    C語言中全局?jǐn)?shù)組和局部數(shù)組的問題

    今天同學(xué)遇到一個(gè)在C語言中全局?jǐn)?shù)組和局部數(shù)組的問題,卡了許久,我也沒有第一時(shí)間看出問題,現(xiàn)在把問題梳理一下,并給出解決方案,需要的朋友可以參考下
    2012-12-12
  • 詳解C++標(biāo)準(zhǔn)庫中處理正則表達(dá)式的類std::regex

    詳解C++標(biāo)準(zhǔn)庫中處理正則表達(dá)式的類std::regex

    std?是?C++?標(biāo)準(zhǔn)庫的命名空間,包含了大量標(biāo)準(zhǔn)的?C++?類、函數(shù)和對象,這些類和函數(shù)提供了廣泛的功能,包括輸入輸出、容器、算法、字符串處理等,這篇文章主要介紹了C++標(biāo)準(zhǔn)庫中提供的用于處理正則表達(dá)式的類std::regex,需要的朋友可以參考下
    2024-03-03
  • 使用C語言實(shí)現(xiàn)五子棋游戲

    使用C語言實(shí)現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了使用C語言實(shí)現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言中關(guān)于scanf函數(shù)的一些問題詳解

    C語言中關(guān)于scanf函數(shù)的一些問題詳解

    這篇文章主要為大家介紹了C語言中關(guān)于scanf函數(shù)的一些問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 淺析C++可變參數(shù)模板的展開方式

    淺析C++可變參數(shù)模板的展開方式

    可變參數(shù)模板(variadic templates)是C++11新增的強(qiáng)大的特性之一,它對模板參數(shù)進(jìn)行了高度泛化,能表示0到任意個(gè)數(shù)、任意類型的參數(shù),這篇文章主要介紹了C++可變參數(shù)模板的展開方式,需要的朋友可以參考下
    2022-04-04
  • C++簡明講解類型轉(zhuǎn)換的使用與作用

    C++簡明講解類型轉(zhuǎn)換的使用與作用

    類型轉(zhuǎn)換(type?cast),是高級語言的一個(gè)基本語法。它被實(shí)現(xiàn)為一個(gè)特殊的運(yùn)算符,以小括號內(nèi)加上類型名來表示,接下來讓我們一起來詳細(xì)了解
    2022-04-04
  • 用C語言獲取文件的大小示例分享

    用C語言獲取文件的大小示例分享

    在linux下獲取一個(gè)指定文件大?。ㄗ止?jié)為單位)的代碼。查了一下發(fā)現(xiàn)是使用系統(tǒng)調(diào)用stat來實(shí)現(xiàn),那么如何使用C語言或C++語言來寫一個(gè)通用的函數(shù)來獲取指定文件大小的函數(shù)呢?
    2014-08-08

最新評論