欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

【ONE·C++||vector(一)】-創(chuàng)新互聯(lián)

總言

??學(xué)習(xí)筆記,慢慢補(bǔ)充。

成都創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)平山,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575文章目錄
  • 總言
  • 1、整體介紹:
  • 2、常用各種接口介紹
    • 2.1、vector的基本結(jié)構(gòu):構(gòu)造、析構(gòu)、賦值
      • 2.1.1、總體情況預(yù)覽
      • 2.1.2、各項(xiàng)函數(shù)使用演示
    • 2.2、vector增刪查改相關(guān)
      • 2.2.1、增刪查改總覽
      • 2.2.2、如何在vector中插入、刪除、遍歷數(shù)據(jù)
      • 2.2.3、front、back函數(shù)
    • 2.3、vector擴(kuò)容相關(guān)
      • 2.3.1、容量問題總覽
      • 2.3.2、resize、reserve函數(shù)介紹
    • 2.4、其它一些函數(shù)介紹
      • 2.4.1、find、insert函數(shù)介紹
      • 2.4.2、erase函數(shù)介紹
      • 2.4.3、vector排序問題:sort
    • 2.5、一些現(xiàn)象、問題說明
      • 2.5.1、一個(gè)問題討論:vector存儲(chǔ)char字符與string的比較
      • 2.5.2、vector與string結(jié)合使用:vector< string >
  • 3、相關(guān)練習(xí)題:
    • 3.1、只出現(xiàn)一次的數(shù)字
    • 3.2、楊輝三角:vector>嵌套使用
    • 3.3、刪除有序數(shù)組中的重復(fù)項(xiàng)
    • 3.4、電話號(hào)碼的字母組合

??
??

1、整體介紹:

?? 該文章參考網(wǎng)站是cplusplus.com。
在這里插入圖片描述
??1、vector是類模板,其有兩個(gè)模板參數(shù)class T、class Alloc = allocator。
??2、class Alloc = allocator:空間配置器(內(nèi)存池)。默認(rèn)配置了一個(gè)缺省參數(shù),由庫提供這個(gè)內(nèi)存池。若自己有設(shè)計(jì)想法,也可自己顯示實(shí)現(xiàn)。

??
??

2、常用各種接口介紹 2.1、vector的基本結(jié)構(gòu):構(gòu)造、析構(gòu)、賦值 2.1.1、總體情況預(yù)覽

??1)、構(gòu)造函數(shù)總覽

在這里插入圖片描述
在這里插入圖片描述
??
??
??2)、析構(gòu)函數(shù)總覽
?? vector的析構(gòu)函數(shù),出了作用域自動(dòng)調(diào)用。
在這里插入圖片描述

??
??
??3)、賦值運(yùn)算符重載總覽
?? 賦值運(yùn)算符重載就涉及到后續(xù)深淺拷貝的問題。
在這里插入圖片描述

??
??4)、小結(jié)
?? 上述幾個(gè)函數(shù)中,
?? ?? ①對(duì)構(gòu)造函數(shù),使用最多的是無參構(gòu)造、拷貝構(gòu)造。
?? ?? ②對(duì)析構(gòu)函數(shù)調(diào)用默認(rèn)的即可,故不用太過理會(huì)。
?? ?? ③對(duì)賦值運(yùn)算符重載,偶爾用到。
??
??
??
??

2.1.2、各項(xiàng)函數(shù)使用演示

??1)、演示構(gòu)造函數(shù):

??①由下述代碼可知,vector是一個(gè)類模板,因此需要顯示實(shí)例化(詳細(xì)學(xué)習(xí)請(qǐng)見模板初階)。

template< class T, class Alloc = allocator>class vector;

??②以下即為常見的vector的構(gòu)造用法:

void test_vector01()
{vectorv1;//無參構(gòu)造
	vectorv2(5, 10);//n個(gè)val
	vectorv3(v2);//拷貝構(gòu)造
}

??③通過調(diào)試觀測如下:需要注意的是,對(duì)于vector的構(gòu)造函數(shù),后續(xù)我們?cè)谀M實(shí)現(xiàn)時(shí)仍舊要解決深淺拷貝的問題。

在這里插入圖片描述

??
??
??
??

2.2、vector增刪查改相關(guān) 2.2.1、增刪查改總覽

在這里插入圖片描述

??
??

2.2.2、如何在vector中插入、刪除、遍歷數(shù)據(jù)

??1)、對(duì)數(shù)據(jù)插入、刪除:
?? 根據(jù)上述總覽,目前我們知道可以使用push_backpop_back、insert、erase來達(dá)成數(shù)據(jù)的插入刪除。

vectorv1;//構(gòu)造一個(gè)vector,名為v1
		v1.push_back(1);//尾插
		v1.push_back(2);
		v1.push_back(3);
		v1.push_back(4);

??
??2)、對(duì)數(shù)據(jù)的遍歷:

在這里插入圖片描述方式一:下標(biāo)+[ ]

?? 相關(guān)函數(shù):
在這里插入圖片描述
在這里插入圖片描述
?? 代碼演示:

//遍歷演示
		for (size_t i = 0; i< v1.size(); ++i)//vector::size
		{	cout<< v1[i]<< " ";//vector::operator[]
		}
		cout<< endl;

		//下標(biāo)訪問,遍歷自增
		for (size_t i = 0; i< v1.size(); ++i)
		{	v1[i]++;
		}

		//再次遍歷
		for (size_t i = 0; i< v1.size(); ++i)//vector::size
		{	cout<< v1[i]<< " ";//vector::operator[]
		}
		cout<< endl;

在這里插入圖片描述
??
??

在這里插入圖片描述方式二:迭代器

?? 代碼演示:

//使用迭代器遍歷:需要注意的是這里迭代器對(duì)應(yīng)的vector使用了模板參數(shù)
		vector::iterator it = v1.begin();
		while (it != v1.end())
		{	cout<< *it<< " ";
			++it;
		}
		cout<< endl;

在這里插入圖片描述
?? 涉及函數(shù):
在這里插入圖片描述

?? 支持迭代器,就支持范圍for:

//使用范圍for
		for (auto e : v1)
		{	cout<< e<< " ";
		}
		cout<< endl;

在這里插入圖片描述

??
??

2.2.3、front、back函數(shù)

??1)、簡介:
?? 獲取vector首元素和尾元素。 關(guān)于front和back二者的使用請(qǐng)見下述練習(xí)3.2。

在這里插入圖片描述

??

2.3、vector擴(kuò)容相關(guān) 2.3.1、容量問題總覽

在這里插入圖片描述

??
??

2.3.2、resize、reserve函數(shù)介紹

??1)、擴(kuò)容機(jī)制的驗(yàn)證

//擴(kuò)容機(jī)制驗(yàn)證
	void TestVectorExpand()
	{size_t sz;
		vectorv;
		sz = v.capacity();

		cout<< "making v grow:\n";
		for (int i = 0; i< 100; ++i)
		{	v.push_back(i);
			if (sz != v.capacity())
			{		sz = v.capacity();
				cout<< "capacity changed: "<< sz<< '\n';
			}
		}
	}

??此處是以VS2019為例的運(yùn)行結(jié)果:
在這里插入圖片描述

??
??2)、reserve、rsize介紹
?? 在已知要插入的數(shù)據(jù)量的情況下,我們可以提前擴(kuò)容:

void TestVectorExpand()
	{size_t sz;
		vectorv;
		//v.resize(100);//resize在開空間的同時(shí)還會(huì)進(jìn)行初始化,影響size。
		v.reserve(100);//reserve只負(fù)責(zé)開辟空間,可緩解vector增容的代價(jià)缺陷問題。
		sz = v.capacity();

		cout<< "making v grow:\n";
		for (int i = 0; i< 100; ++i)
		{	v.push_back(i);
			if (sz != v.capacity())
			{		sz = v.capacity();
				cout<< "capacity changed: "<< sz<< '\n';
			}
		}
	}

?? 在上述場景中不能使用resize,因?yàn)閞esize在開辟空間的同時(shí)進(jìn)行初始化數(shù)據(jù)。假如上述場景中使用了resize,相當(dāng)于我已經(jīng)在resize的幫助下?lián)碛辛?00個(gè)數(shù)據(jù),后續(xù)的for循環(huán)又為我提供了100個(gè)數(shù)據(jù)。
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

??
??

2.4、其它一些函數(shù)介紹 2.4.1、find、insert函數(shù)介紹

??1)、對(duì)algorithm
?? 在vector中,可以看到并沒有單獨(dú)的find函數(shù),是因?yàn)槲覀兺耆梢杂肹 ]來做到,另者,如果有需要,algorithm庫中提供了find函數(shù)。

在這里插入圖片描述
??同理,vector也不像string一樣提供流插入、流提取。因?yàn)槲覀儗?duì)vector的一般是遍歷訪問,而string有整體打印字符串的需求。
??
??
??2)、對(duì)vector::insert
?? vector中insert的用法說明:注意iterator position,其使用的是迭代器。

iterator is a member type, defined as a random access iterator type that points to elements.

在這里插入圖片描述
??
??3)、使用演示

vectorv1;//構(gòu)造一個(gè)vector,名為v1
		v1.push_back(1);//尾插
		v1.push_back(2);
		v1.push_back(3);
		v1.push_back(4);

		//使用find在v1中查找值:范圍[v1.begin(),v1.end()),val=3
		vector::iterator pos = find(v1.begin(), v1.end(), 3);
		if (pos != v1.end())//檢查是否找到相關(guān)值。此處find的last=v1.end()
		{	v1.insert(pos,30);
		}
		//遍歷:用于檢測是否成功插入數(shù)據(jù)
		for (auto e : v1)
		{	cout<< e<< " ";
		}
		cout<< endl;

在這里插入圖片描述
??
??
??4)、一個(gè)邊界說明
?? 如下圖,分析現(xiàn)象并說明原因:

在這里插入圖片描述

?? 原因:在v1中尋找300,find返回結(jié)果為v1.end()下標(biāo),相當(dāng)于尾插。
?? 說明:雖然此處沒有明確報(bào)錯(cuò)現(xiàn)象,但使用find找到值后最好還是檢查一下。
??
??

2.4.2、erase函數(shù)介紹

??1)、對(duì)erase
在這里插入圖片描述

??2)、使用演示:

vectorv1;//構(gòu)造一個(gè)vector,名為v1
		v1.push_back(1);//尾插
		v1.push_back(2);
		v1.push_back(3);
		v1.push_back(4);

		//使用find在v1中查找值:范圍[v1.begin(),v1.end()),val=3
		vector::iterator pos = find(v1.begin(), v1.end(), 3);
		if (pos != v1.end())//檢查是否找到相關(guān)值。此處find的last=v1.end()
		{	v1.erase(pos);//刪除單個(gè)元素
		}
		
		//遍歷:用于檢測是否成功插入數(shù)據(jù)
		for (auto e : v1)
		{	cout<< e<< " ";
		}
		cout<< endl;

在這里插入圖片描述

??3)、不檢查find返回值情況驗(yàn)證:
?? 如下圖所示:報(bào)錯(cuò)。

在這里插入圖片描述
??
??
??

2.4.3、vector排序問題:sort

??1)、基本介紹
?? ①sort也是一個(gè)函數(shù)模板,其底層使用的原理是快排,默認(rèn)排的是升序。
在這里插入圖片描述
??
??2)、sort排升序

//亂序
		vectorv1;
		v1.push_back(11);
		v1.push_back(23);
		v1.push_back(6);
		v1.push_back(1);
		v1.push_back(9);
		v1.push_back(7);
		v1.push_back(3);
		v1.push_back(15);
		//排升序
		sort(v1.begin(), v1.end());
		//遍歷查看
		vector::iterator it = v1.begin();
		while (it != v1.end())
		{	cout<< *it<< " ";
			it++;
		}
		cout<< endl;

在這里插入圖片描述
??
??3)、sort排降序
?? sort排降序涉及到Compare comp仿函數(shù),此處我們只需要學(xué)習(xí)使用方法:
?? 兩個(gè)函數(shù)介紹:less、greater

介紹:
		less也是一個(gè)類模板,int為此處需要的數(shù)據(jù)類型
		greater同上,但使用greater需要包含頭文件。
		less不需要包含的這個(gè)頭文件的原因是,sort默認(rèn)升序。
		

		#includelessls;
		greatergt;
		
		//sort(v1.begin(), v1.end(), ls);
		sort(v1.begin(), v1.end(), gt);

在這里插入圖片描述
??當(dāng)然,上述只是一種寫法介紹,也可以按照下述寫法進(jìn)行:

sort(v1.begin(), v1.end(), greater());

??此處相當(dāng)于匿名對(duì)象的使用。

在這里插入圖片描述

??
??
??4)、sort在string中的使用演示

string s("hello string 1144579");
		sort(s.begin(), s.end());
		cout<< s<< endl;

?? sort在string中是按照ASCII碼排序的:

在這里插入圖片描述

?? 也可以排降序:

string s("hello string 1144579");
		sort(s.begin(), s.end(), greater());
		cout<< s<< endl;

在這里插入圖片描述

??
??
??

2.5、一些現(xiàn)象、問題說明 2.5.1、一個(gè)問題討論:vector存儲(chǔ)char字符與string的比較

?? 問題描述:

vectorv;
		string s;

?? 上述二者有什么差異?能否用前者代替后者?
?? 回答:
?? ①string中s后面默認(rèn)追加\0;
?? ②相比于vector,string中的相關(guān)函數(shù)比較多,實(shí)現(xiàn)功能也更全,比如+=(一個(gè)字符/字符串),流插入流提取,find(查字符串),比較大小、to_string等。
??
??
??

2.5.2、vector與string結(jié)合使用:vector< string >
//void push_back (const value_type& val);
		//void push_back (const T& val);

		vectorstrV;

		string str1("張龍");
		strV.push_back(str1);//深拷貝:push_back中val為什么要加&的原因

		strV.push_back(string("趙虎"));//匿名對(duì)象:push_back中val為什么要加const的原因

		strV.push_back("王朝");//日常使用習(xí)慣:隱式類型轉(zhuǎn)換
//for (auto str : strV)
		//{//	cout<< str<< endl;
		//}
		
		//1、這里也涉及一個(gè)深淺拷貝的問題,所以需要十分謹(jǐn)慎處理
		//2、如果不涉及改變內(nèi)容,可以加上const
		for (const auto& str : strV)
		{	cout<< str<< endl;
		}

在這里插入圖片描述

??
??
??

3、相關(guān)練習(xí)題: 3.1、只出現(xiàn)一次的數(shù)字

?? 題源
在這里插入圖片描述
?? 代碼如下:

class Solution {public:
    int singleNumber(vector& nums) {int value=0;
        for(auto e:nums)
        {value^=e;//異或
        }
        return value;
    }
};

?? 要滿足時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1),最簡單的方式就是使用異或。
?? 其余不滿足上述條件下,也可以使用排序遍歷、直接遍歷等方法。
??
??
??

3.2、楊輝三角:vector>嵌套使用

?? 題源

在這里插入圖片描述
??
?? 關(guān)鍵點(diǎn): 理解vector>的含義。
在這里插入圖片描述

?? 代碼如下:

class Solution {public:
    vector>generate(int numRows) {vector>vv;//定義一個(gè)vector>類型的數(shù)據(jù)
        vv.resize(numRows);//第一次開辟空間:numRows,表示總行數(shù)(整體大小)
        for(size_t i=0;ivv[i].resize(i+1,0);//第二次開辟空間,表示初始化楊輝三角的每行大小
            vv[i].front()=vv[i].back()=1;//楊輝三vv.size()角每行首尾數(shù)據(jù)為1

            //vv[i].resize(i+1,1);//上述代碼也可以合并為一行實(shí)現(xiàn)
        }

        for(size_t i=2;ifor(size_t j=1;jvv[i][j]=vv[i-1][j-1]+vv[i-1][j];
            }
        }

        return vv;
    }
};

對(duì)vv[i][j]的理解如下:雙層嵌套
在這里插入圖片描述

??
??
??

3.3、刪除有序數(shù)組中的重復(fù)項(xiàng)

?? 題源
在這里插入圖片描述

??1)、寫法說明
?? 此題我們?cè)肅語言寫過:

int removeDuplicates(int* nums, int numsSize){int src,det;
det=0;src=1;
while(srcif(nums[src]!=nums[det])
    {nums[++det]=nums[src];
    }
    src++;
}
return det+1;
}

?? 如果用C++寫呢?
??使用vector下,本質(zhì)區(qū)別還是不變。

class Solution {public:
    int removeDuplicates(vector& nums) {int src,det;
    det=0;src=1;
    while(srcif(nums[src]!=nums[det])
        {nums[++det]=nums[src];
        }
        src++;
    }
    return det+1;
    }
};

??2)、一點(diǎn)擴(kuò)展
?? 在上述用C++寫的代碼中,我們只是做了挪動(dòng)數(shù)據(jù)的處理,假如我們要求挪動(dòng)數(shù)據(jù)后,并把之后那些無效數(shù)據(jù)都刪除,該如何操作呢?
?? 此處就可以借助vector中的resize函數(shù):當(dāng)我們輸入的n小于原先vector的size時(shí),會(huì)保留n個(gè)數(shù)據(jù)空間,并把n之后的容量空間刪除。

nums.riseze(det+1);//此處det+1是因?yàn)槲覀冚斎氲膎是數(shù)據(jù)個(gè)數(shù),而det標(biāo)記的是下標(biāo)。

??
??
??

3.4、電話號(hào)碼的字母組合

?? 題源
在這里插入圖片描述

?? 此題的整體思路是循環(huán)控制遞歸。
??

class Solution {//numToStr:主要是用于映射2-9數(shù)字對(duì)應(yīng)的字母
    char* numToStr[10]={" "," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    //string numToStr[10]={"","","abc","def","ghi"."jkl","mno","pqrs","tuv","wxyz"};

public:

    //digits:系統(tǒng)輸入的數(shù)字字符串
    //di:這些字符串對(duì)應(yīng)的順序:第一個(gè)、第二個(gè)
    //retV:用于存儲(chǔ)獲取的排列組合,總數(shù)目
    //combineStr:用于存儲(chǔ)單次遞歸獲取的組合
    void Combine(string digits,int di,vector& retV,string combineStr)
    {if(di==digits.size())
        {retV.push_back(combineStr);
            return;
        }
        
        int num=digits[di]-'0';//將輸入的數(shù)字字符轉(zhuǎn)換為數(shù)字
        string str=numToStr[num];//當(dāng)前數(shù)字對(duì)應(yīng)的字母
        for(auto ch :str)
        {Combine(digits,di+1,retV,combineStr+ch);
        }
    }



    vectorletterCombinations(string digits) {vectorv;
        if(digits.empty())//如果輸入的字符串為空時(shí)
        {return v;
        }
        string str;
        Combine(digits,0,v,str);
         return v;
    }
};

??
??
??
??
??

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

本文題目:【ONE·C++||vector(一)】-創(chuàng)新互聯(lián)
文章位置:http://aaarwkj.com/article40/codjho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、營銷型網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈搜索引擎優(yōu)化、微信小程序、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
黄色三级亚洲男人的天堂| 免费av在线观看日韩| 91九色国产在线视频| 中文字幕日韩激情欧美一区| 丁香婷婷激情五月天综合| 日本区一区二区三高清视频| 欧美日韩精品福利一区二区| 2022国产精品一区| 亚洲精品国产亚洲精品| 中文字幕有码在线朋友| 91午夜福利视频鉴赏| 中国女人内射91熟女| 日韩成人中文字幕电影| 日韩欧美国产综合第一页| 国产精品久久久天美传媒| 三级国产大片在线观看| 99久久久精品国产免费| 欧美亚洲一区二区三区精品| 亚洲精品一级二级三级| 国产大学生情侣在线视频| 女人裸体网站无遮挡午夜| 人妻中文字幕视频在线| 色老头视频一区二区三区| 欧美精品一区二区三区黄片| 深夜释放自己污在线看| 色婷婷区二区三区四区| 三级黄色片免费久久久| 99热这里只有精品在线| 国产白丝免费在线观看| 亚洲黄色片大奶子水多| 欧洲亚洲国产一区二区| 亚洲日本日本午夜精品| 97在线观看视频在线观看| 日韩性生活视频免费播放| 98精品熟女亚洲av| 国精品91人妻一区二区| 蜜桃国产精品视频网站| av人妻熟女少妇蒂亚| 亚洲熟妇av一区二区| 亚洲中文字幕第11页| 日韩免费在线观看av|