溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++?vector的基本使用方法是什么

發(fā)布時(shí)間:2023-03-07 11:02:07 來(lái)源:億速云 閱讀:132 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“C++ vector的基本使用方法是什么”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“C++ vector的基本使用方法是什么”文章能幫助大家解決問題。

    一、vector和string的聯(lián)系與不同

    1.vector底層也是用動(dòng)態(tài)順序表實(shí)現(xiàn)的,和string是一樣的,但是string默認(rèn)存儲(chǔ)的就是字符串,而vector的功能較為強(qiáng)大一些,vector不僅能存字符,理論上所有的內(nèi)置類型和自定義類型都能存,vector的內(nèi)容可以是一個(gè)自定義類型的對(duì)象,也可以是一個(gè)內(nèi)置類型的變量。

    2.vector在使用時(shí)需要進(jìn)行類模板的實(shí)例化,因?yàn)閭鬟f的模板參數(shù)不同,則vector存儲(chǔ)的元素類型就會(huì)有變化,所以在使用vector的時(shí)候要進(jìn)行類模板的顯式實(shí)例化。
    類模板的第二個(gè)參數(shù)是空間配置器,這個(gè)學(xué)到后面再說,而且這個(gè)參數(shù)是有缺省值的,我們只用這個(gè)缺省值就歐克了,所以在使用vector時(shí),只需要關(guān)注第一個(gè)參數(shù)即可。

    C++?vector的基本使用方法是什么

    void test_vector1()
    {
    	string s;
    	vector<int> v;
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(3);
    	v.push_back(4);
    	//string和vector底層都是用數(shù)組實(shí)現(xiàn)的,所以他們都支持迭代器、范圍for、下標(biāo)+[]的遍歷方式
    	for (size_t i = 0; i < v.size(); i++)
    	{
    		cout << v[i] << " ";//string和vector的底層都是數(shù)組,所以可以使用[],但list就不能使用[]了,所以萬(wàn)能的方法是迭代器。
    	}
    	cout << endl;
    
    	vector<int>::iterator it = v.begin();//iterator實(shí)際是某種類型的重定義,在使用時(shí)要指定好類域。
    	while (it != v.end())
    	{
    		cout << *it << " ";
    		++it;
    	}
    	cout << endl;
    
    	for (auto e : v)//不就是迭代器嗎?
    	{
    		cout << e << " ";
    	}
    	cout << endl;
    
    	cout << v.max_size() << endl;//int是10億多,因?yàn)閕nt占4個(gè)字節(jié),42億÷4。
    	cout << s.max_size() << endl;//max_size的大小是數(shù)據(jù)的個(gè)數(shù),我的編譯器的char是21億多。不用管他,這接口沒價(jià)值。
    
    	//vector<char> vstr;
    	//string str;
    	//vector<char>不能替代string,即使兩者都是字符數(shù)組也不行,因?yàn)閟tring有\(zhòng)0
    }

    二、vector的擴(kuò)容操作

    1.resize() (缺省值為匿名對(duì)象)&& reserve()

    1.對(duì)于string和vector,reserve和resize是獨(dú)有的,因?yàn)樗麄兊牡讓佣际莿?dòng)態(tài)順序表實(shí)現(xiàn)的,list就沒有reserve和resize,因?yàn)樗讓邮擎湵砺铩?/p>

    2.對(duì)于reserve這個(gè)函數(shù)來(lái)說,官方并沒有將其設(shè)定為能夠兼容實(shí)現(xiàn)縮容的功能,明確規(guī)定這個(gè)函數(shù)在其他情況下,例如預(yù)留空間要比當(dāng)前小的情況下,這個(gè)函數(shù)的調(diào)用是不會(huì)引起空間的重新分配的,也就是說容器vector的capacity是不會(huì)被影響的。

    C++?vector的基本使用方法是什么

    3.有的人可能認(rèn)為縮容只要丟棄剩余的空間就好了,但其實(shí)沒有那么簡(jiǎn)單,你從C語(yǔ)言階段free空間不能分兩次free進(jìn)行釋放就可以看出來(lái),一塊已經(jīng)申請(qǐng)好的空間就是一塊兒獨(dú)立的個(gè)體,不能說你保留空間的一部分丟棄剩余的一部分,這樣是不行的,本質(zhì)上和操作系統(tǒng)的內(nèi)存管理有關(guān)系,如果對(duì)這部分知識(shí)有興趣,可以下去研究一下。

    4.但值得注意的是縮容表面看起來(lái)是降低了空間的使用率,想要提高程序的效率,但實(shí)際上并未提高效率,縮容是需要異地縮容的,需要重新開空間和拷貝數(shù)據(jù),代價(jià)不小,所以平常不建議對(duì)空間進(jìn)行縮容。

    C++?vector的基本使用方法是什么

    5.vector的resize和string的resize同樣具有三種情況,但vector明顯功能比string要更健壯一些,string類型只能針對(duì)于字符,而vector在使用resize進(jìn)行初始化空間數(shù)據(jù)時(shí),對(duì)內(nèi)置類型和自定義類型均可以調(diào)用對(duì)應(yīng)的拷貝構(gòu)造來(lái)初始化,所以其功能更為健壯,默認(rèn)將整型類型初始化為0,指針類型初始化為空指針。

    C++?vector的基本使用方法是什么

    void test_vector2()
    {
    	vector<int> v;
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(3);
    	v.push_back(4);
    	v.push_back(5);
    	//resize和reserve對(duì)于vector和string是獨(dú)有的,對(duì)于list而言,就沒有reserve和resize
    
    	cout << v.capacity() << endl;
    	v.reserve(10);
    	cout << v.capacity() << endl;
    	v.reserve(4);
    	cout << v.capacity() << endl;//并不會(huì)縮容,縮容并不會(huì)提高效率,縮容是有代價(jià)的,某種程度上就是以空間換時(shí)間。
    
    	v.resize(8);//int、指針這些內(nèi)置類型的默認(rèn)構(gòu)造就把他們初始化為0和空指針這些。
    	v.resize(15, 1);
    	v.resize(3);//不縮容,也是采用惰性刪除的方式,將size調(diào)整為3就可以了,顯示數(shù)組內(nèi)容的時(shí)候按照size大小顯示就可以了。
    }

    2.reserve在g++和vs上的擴(kuò)容機(jī)制

    1.在vs上擴(kuò)容機(jī)制采用1.5倍的大小,g++上采用2倍的大小,對(duì)于空間的擴(kuò)容,如果開大了會(huì)造成空間浪費(fèi),開小了不夠用,又會(huì)導(dǎo)致頻繁擴(kuò)容帶來(lái)性能的損耗,而2倍的大小可以說是剛剛好,至于微軟的工程師為什么選擇1.5來(lái)進(jìn)行擴(kuò)容,是由于內(nèi)存的某種對(duì)其因素導(dǎo)致。

    C++?vector的基本使用方法是什么

    void test_vector_expand()//擴(kuò)容機(jī)制大概是1.5倍進(jìn)行擴(kuò)容
    {
    	size_t sz;
    	vector<int> v;
    
    	//v.reserve(100);//已知開辟空間大小時(shí),我們應(yīng)該調(diào)用reserve來(lái)提前預(yù)留空間,進(jìn)行擴(kuò)容。
    
    	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';
    		}
    	}
    }

    3.reserve異地?cái)U(kuò)容和shrink_to_fit異地縮容的設(shè)計(jì)理念

    1.對(duì)于reserve的設(shè)計(jì)理念就是不去縮容,就算手動(dòng)調(diào)用reserve進(jìn)行縮容,編譯器也不會(huì)理你,空間的大小始終都不會(huì)變,capacity的值一直是不動(dòng)的,這樣的設(shè)計(jì)理念本質(zhì)上就是用空間來(lái)?yè)Q時(shí)間,因?yàn)楫惖乜s容需要開空間和拷貝數(shù)據(jù),比較浪費(fèi)時(shí)間。

    2.相反shrink_to_fit就是縮容函數(shù),強(qiáng)制性的將capacity的大小降低到適配size大小的值,它的設(shè)計(jì)理念就是以空間來(lái)?yè)Q時(shí)間,但日常人們所使用的手機(jī)或者PC空間實(shí)際上是足夠的,不夠的是時(shí)間,所以這種函數(shù)還是不要使用的為好,除非說你后面肯定不會(huì)插入數(shù)據(jù)了,不再進(jìn)行任何modify操作,那你可以試著將空間還給操作系統(tǒng),減少空間的使用率。

    void test_vector7()
    {
    	vector<int> v;
    	v.reserve(10);
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(3);
    	v.push_back(4);
    	v.push_back(5);
    	cout << v.size() << endl;
    	cout << v.capacity() << endl;
    	
    	//C++不會(huì)太推薦使用malloc來(lái)進(jìn)行空間的初始化了,因?yàn)楹苡锌赡艽嬖谧远x類型對(duì)象沒有初始化的問題,如果用new會(huì)自動(dòng)調(diào)用構(gòu)造。
    
    	//設(shè)計(jì)理念就是不去縮容,因?yàn)楫惖乜s容的代價(jià)很大,所以就算你用reserve或是resize調(diào)整大小以改變capacity,但編譯器不會(huì)管你。
    	// 因?yàn)樗脑O(shè)計(jì)理念不允許它這么做,而遇到shrink_to_fit就沒轍了,因?yàn)樗强s容函數(shù)?。?!
    	//---不動(dòng)空間,不去縮容,以空間換時(shí)間的設(shè)計(jì)理念,因?yàn)榭s容雖然空間資源多了,但是時(shí)間就長(zhǎng)了,為了提高時(shí)間,就用空間換。
    	//shrink_to_fit就是反面的函數(shù),進(jìn)行了縮容。
    	v.reserve(3);
    	cout << v.size() << endl;
    	cout << v.capacity() << endl;
    
    	//設(shè)計(jì)理念:以時(shí)間換空間,一般縮容都是異地縮容,代價(jià)不小,一般不要輕易使用。通常情況下,我們是不缺空間的,缺的是時(shí)間。
    	v.shrink_to_fit();//縮容函數(shù),代價(jià)很大,通常的縮容的方式,就是找一塊新的較小的空間,然后將原有數(shù)據(jù)拷貝進(jìn)去
    	
    
    	v.resize(3);
    	cout << v.size() << endl;
    	cout << v.capacity() << endl;
    
    	v.clear();//clear都是不動(dòng)空間的
    }

    4.vector和malloc分別實(shí)現(xiàn)動(dòng)態(tài)開辟的二維數(shù)組

    楊輝三角

    1.對(duì)于C語(yǔ)言實(shí)現(xiàn)的話,需要一個(gè)返回值和兩個(gè)輸出型參數(shù)來(lái)返回到后臺(tái)接口里面,第一個(gè)參數(shù)代表二維數(shù)組的大小,這道題我們知道返回的二維數(shù)組的大小,但其他題是有可能不知道的,而leetcode的后臺(tái)測(cè)試用例是統(tǒng)一設(shè)計(jì)的,為了兼容其他不知道返回?cái)?shù)組大小的題目,這里統(tǒng)一使用了輸出型參數(shù)來(lái)控制。第二個(gè)參數(shù)的原因也是如此。

    2.二維數(shù)組、二維數(shù)組里面的元素、需要返回二維數(shù)組里面的一維數(shù)組的元素個(gè)數(shù),這些數(shù)組都需要malloc出來(lái)。

    //后臺(tái)實(shí)現(xiàn)的地方:int returnSize=0;int returnColumnSizes[];
    //grenerate(num,&returnSize,&returnColumnSizes);//函數(shù)調(diào)用
    int** generate(int numRows, int* returnSize, int** returnColumnSizes) 
    {
        int** p = (int**)malloc(numRows * sizeof(int*));
        *returnSize = numRows;
        *returnColumnSizes = (int*)malloc(sizeof(int) * numRows);
        for (int i = 0; i < numRows; i++)
        {
            p[i] = (int*)malloc(sizeof(int) * (i + 1));//給每一個(gè)二維數(shù)組的元素動(dòng)態(tài)開辟一個(gè)空間
            (*returnColumnSizes)[i] = i + 1;
            p[i][0] = p[i][i] = 1;
            //for(int j = i; j < i + 1; j++)//條件控制有問題
            //for (int j = 0; j < i + 1 ; j++)
            for (int j = 1; j < i ; j++)
            {
                if (p[i][j]!=1)
                {
                    p[i][j]=p[i-1][j-1]+p[i-1][j];
                }
            }
        }
        return p;
    }

    3.對(duì)于vector來(lái)講的話,動(dòng)態(tài)開辟就不需要我們自己做,通過resize就可以控制容器的空間大小,不用malloc動(dòng)態(tài)開辟了,所以對(duì)于動(dòng)態(tài)開辟的二維數(shù)組來(lái)講,vector實(shí)際上要簡(jiǎn)便許多。

    class Solution {
    public:
        vector<vector<int>> generate(int numRows) {
            vector<vector<int>> vv;
            vv.resize(numRows);
            //第二個(gè)參數(shù)不傳就是匿名對(duì)象,會(huì)自動(dòng)調(diào)用容器中元素的構(gòu)造函數(shù)。內(nèi)置類型或自定義類型的構(gòu)造。
            for(size_t i=0; i<vv.size(); i++)
            {
                vv[i].resize(i+1, 0);//給每一個(gè)vector<int>容器預(yù)留好空間并進(jìn)行初始化
                vv[i][0] = vv[i][vv[i].size() - 1] = 1;
            }
            for(int i=0; i<vv.size(); i++)
            {
                for(int j=0; j<vv[i].size(); j++)
                {
                    if(vv[i][j]==0)
                    {
                        vv[i][j]=vv[i-1][j]+vv[i-1][j-1];
                    }
                }
            }
            return vv;
    
        }
    };

    三、vector的元素訪問操作

    1.operator[]和at對(duì)于越界訪問的檢查機(jī)制(一段經(jīng)典的代碼錯(cuò)誤)

    1.下面所展示的代碼是比較經(jīng)典的錯(cuò)誤,就是我們用reserve擴(kuò)容之后,就利用[]和下標(biāo)來(lái)進(jìn)行容器元素的訪問,擴(kuò)容之后空間的使用權(quán)確實(shí)屬于我們,但是operator[]的越界訪問檢查機(jī)制,導(dǎo)致了我們程序的崩潰,assert(pos<size),所以對(duì)于元素的訪問,是要用resize來(lái)進(jìn)行size的調(diào)整的,而reserve的主要作用是用來(lái)提前預(yù)留空間,在空間不夠使用的情況下進(jìn)行調(diào)用,所以這里使用的情景有些不搭。

    C++?vector的基本使用方法是什么

    2.對(duì)于at的使用,所采用的越界訪問檢查機(jī)制是拋異常,catch捕獲異常之后,我們可以將異常信息打印出來(lái),可以看到異常信息是無(wú)效的vector下標(biāo),指的也是所傳下標(biāo)是無(wú)用的,實(shí)際就是下標(biāo)位置超過了size。

    C++?vector的基本使用方法是什么

    void test_vector4()
    {
    	vector<int> v;
    	v.reserve(10);
    	//這是一段經(jīng)典的錯(cuò)誤代碼。reserve改變的是capacity主要解決的是插入數(shù)據(jù)時(shí)涉及到的擴(kuò)容問題。
    	//resize改變的是size,平常對(duì)于vector的容量增加,還是resize多一點(diǎn),resize可以直接包攬reserve的活,并且除此之外還能初始化空間。
    	for (size_t i = 0; i < 10; i++)
    	{
    		//v[i] = i;
    		//對(duì)于[]的使用實(shí)際會(huì)有一個(gè)assert的越界斷言的檢查。assert(i<v.size()),你的下標(biāo)不能超過size。
    		//雖然reserve的確把空間開辟好了,你也能用這個(gè)空間,但是[]他有size和下標(biāo)的越界檢查,所以你的程序就會(huì)報(bào)錯(cuò)。
    		//reserve=開空間+初始化(有默認(rèn)值)
    		v.at(i) = i;//拋異常
    
    		//斷言報(bào)錯(cuò)真正的問題是在于,release版本下面,斷言就失效了,斷言在release版本下面是不起作用的。
    	}
    }
    int main()
    {
    	//test_vector1();
    	//test_vector2();
    	//test_vector_expand();
    	try
    	{
    		//test_vector6();
    	}
    	catch (const exception& e)
    	{//在這個(gè)地方捕獲異常然后進(jìn)行打印
    		cout << e.what() << endl;//報(bào)錯(cuò)valid vector subscript,無(wú)效的vector下標(biāo)
    	}
    	//test_vector4();
    	//test_vector5();
    	//test_vector6();
    	test_vector7();
    
    	//string算是STL的啟蒙,string的源碼我們就不看了
    	return 0;
    }

    四、vector的修改操作

    1.assign和迭代器的配合使用

    1.assign有兩種使用方式,一種是用n個(gè)value來(lái)進(jìn)行容器元素的覆蓋,一種是用迭代器區(qū)間的元素來(lái)進(jìn)行容器元素的覆蓋,這里的迭代器采用模板形式,因?yàn)榈黝愋筒粌H僅可能是vector類型,也有可能是其他容器類型,所以這里采用模板泛型的方式。

    C++?vector的基本使用方法是什么

    2.而且迭代器使用起來(lái)實(shí)際是非常方便的,由于vector的底層是連續(xù)的順序表,所以我們可以通過指針&plusmn;整數(shù)的方式來(lái)控制迭代器賦值的區(qū)間,所以采用迭代器作為參數(shù)是非常靈活的。

    void test_vector5()
    {
    	vector<int> v;
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(3);
    
    	for (auto e : v)
    	{
    		cout << e << " ";
    	}
    	cout << endl;
    	//void assign(size_type n, const value_type & val);前后類型分別為size_t和模板參數(shù)T的類型typedef,那就是int類型
    	v.assign(10, 1);
    	for (auto e : v)
    	{
    		cout << e << " ";
    	}
    	cout << endl;
    	
    	vector<int> v1;
    	v1.push_back(10);
    	v1.push_back(20);
    	v1.push_back(30);
    	//template <class InputIterator> void assign(InputIterator first, InputIterator last);
    	v.assign(v1.begin(), v1.end());
    	for (auto e : v)
    	{
    		cout << e << " ";
    	}
    	cout << endl;
    
    	string str("hello world");
    	v.assign(str.begin(), str.end());//assign里面的迭代器類型是不確定的,既有可能是他自己的iterator也有可能是其他容器的迭代器類型。
    	for (auto e : v)
    	{
    		cout << e << " ";
    	}
    	cout << endl;
    
    	v.assign(++str.begin(), --str.end());//你可以控制迭代器的區(qū)間,指定assign的容器元素內(nèi)容的長(zhǎng)度。
    	for (auto e : v)
    	{
    		cout << e << " ";
    	}
    	cout << endl;
    
    }

    2.insert和find的配合使用

    1.對(duì)于順序表這種結(jié)構(gòu)來(lái)說,頭插和頭刪的效率是非常低的,所以vector只提供了push_back和pop_back,而難免遇到頭插和頭刪的情況時(shí),可以偶爾使用insert和erase來(lái)進(jìn)行頭插和頭刪,并且insert和erase的參數(shù)都使用了迭代器類型作為參數(shù),因?yàn)榈鞲哂衅者m性。

    2.如果要在vector的某個(gè)位置進(jìn)行插入時(shí),肯定是需要使用find接口的,但其實(shí)vector的默認(rèn)成員函數(shù)并沒有find接口,這是為什么呢?因?yàn)榇蠖鄶?shù)的容器都會(huì)用到查找接口,也就是find,所以C++直接將這個(gè)接口放到算法庫(kù)里面去了,實(shí)現(xiàn)一個(gè)函數(shù)模板,這個(gè)函數(shù)的實(shí)現(xiàn)實(shí)際也比較簡(jiǎn)單,只要遍歷一遍迭代器然后返回對(duì)應(yīng)位置的迭代器即可,所以這個(gè)函數(shù)不單獨(dú)作為某個(gè)類的成員函數(shù),而是直接放到了算法庫(kù)里面去。

    C++?vector的基本使用方法是什么

    void test_vector6()//測(cè)試insert和find
    {
    	vector<int> v;
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(3);
    
    	v.insert(v.begin(), 4);
    	v.insert(v.begin() + 2, 4);
    	//vector的迭代器能夠直接+2,源自于vector的底層是連續(xù)的空間,迭代器也就是連續(xù)的,而list的底層不是連續(xù)空間,而是一個(gè)個(gè)的節(jié)點(diǎn),
    	//所以迭代器就不能++來(lái)進(jìn)行使用了
    
    	//如果要在vector里面的數(shù)字3位置插入一個(gè)元素的話:std::find,find的實(shí)現(xiàn)就是遍歷一遍迭代器,找到了就返回對(duì)應(yīng)位置的迭代器。
    	//而vector、list、deque等容器都會(huì)用到find,所以find直接實(shí)現(xiàn)一個(gè)模板即可。
    	vector<int>::iterator it = std::find(v.begin(), v.end(), 3);
    	//string沒有實(shí)現(xiàn)find的原因是string不僅僅要找某一個(gè)字符,而且還要找一個(gè)字串,所以算法庫(kù)的find就不怎么適用,string就自己造輪子
    	v.insert(it, 30);
    	for (auto e : v)
    	{
    		cout << e << " ";
    	}
    	cout << endl;
    }

    3.類外、類內(nèi)、算法庫(kù)的3個(gè)swap

    vector類內(nèi)的swap用于兩個(gè)對(duì)象的交換,在swap實(shí)現(xiàn)里面再調(diào)用std的swap進(jìn)行內(nèi)置類型的交換,但C++用心良苦,如果你不小心使用的格式是std里面的swap格式的話,也沒有關(guān)系,因?yàn)轭愅饷嬗幸粋€(gè)匹配vector的swap,所以會(huì)優(yōu)先調(diào)用類外的swap,C++極力不想讓你調(diào)用算法庫(kù)的swap,就是因?yàn)槿绻粨Q的類型是自定義類型的情況下,算法庫(kù)的swap會(huì)進(jìn)行三次深拷貝,代價(jià)極大,所以為了極力防止你調(diào)用算法庫(kù)的swap,C++不僅在類內(nèi)定義了swap,在類外也定義了已經(jīng)實(shí)例化好的swap,調(diào)用時(shí)會(huì)優(yōu)先調(diào)用最匹配的swap。

    void test_vector8()
    {
    	vector<int> v;
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(3);
    	vector<int> v1;
    	v1.swap(v);
    	swap(v1, v);//一不小心這樣用呢?那也不會(huì)去調(diào)用算法庫(kù)里面的三次深拷貝的swap
    	//這里會(huì)優(yōu)先匹配vector的類外成員函數(shù),既然有vector作為類型實(shí)例化出來(lái)的swap函數(shù)模板,就沒有必要調(diào)用算法庫(kù)里面的模板進(jìn)行實(shí)例化
    	//template <class T, class Alloc>
    	//void swap(vector<T, Alloc>&x, vector<T, Alloc>&y);
    }

    五、看源碼時(shí)需要注意的問題

    1.看源碼框架的方法:將類成員變量先抽出來(lái),看一看成員函數(shù)的聲明具體都實(shí)現(xiàn)了什么功能,如果想要看實(shí)現(xiàn),那就去.c文件抽出來(lái)具體函數(shù)去看

    2.看某些書籍時(shí)的道理和看源碼是一樣的,要進(jìn)行抽絲剝繭,不要想著第一遍就把看到的所有東西都弄回,如果你覺得這本書或源碼非常不錯(cuò),你可以多次反復(fù)的去看,要循序漸進(jìn)的去學(xué),一段時(shí)間之后,你的知識(shí)儲(chǔ)備上來(lái)之后,可能再去看書籍或者源碼又有新的不同的感受,所以不要想著一遍就把所有的東西都搞明白,第一遍弄懂個(gè)70%-80%就很不錯(cuò),如果你想學(xué)扎實(shí)一點(diǎn),那就增加遍數(shù)。

    關(guān)于“C++ vector的基本使用方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI