日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++】 C++标准模板库(一) Vector

發(fā)布時間:2024/4/21 c/c++ 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】 C++标准模板库(一) Vector 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一:C++ Vectors

Vectors 包含著一系列連續(xù)存儲的元素,其行為和數(shù)組類似。訪問Vector中的任意元素或從末尾添加元素都可以在常量級時間復(fù)雜度內(nèi)完成,而查找特定值的元素所處的位置或是在Vector中插入元素則是線性時間復(fù)雜度。

Constructors構(gòu)造函數(shù)
Operators對vector進行賦值或比較
assign()對Vector中的元素賦值
at()返回指定位置的元素
back()返回最末一個元素
begin()返回第一個元素的迭代器
capacity()返回vector所能容納的元素數(shù)量(在不重新分配內(nèi)存的情況下)
clear()清空所有元素
empty()判斷Vector是否為空(返回true時為空)
end()返回最末元素的迭代器(譯注:實指向最末元素的下一個位置)
erase()刪除指定元素
front()返回第一個元素
get_allocator()返回vector的內(nèi)存分配器
insert()插入元素到Vector中
max_size()返回Vector所能容納元素的最大數(shù)量(上限)
pop_back()移除最后一個元素
push_back()在Vector最后添加一個元素
rbegin()返回Vector尾部的逆迭代器
rend()返回Vector起始的逆迭代器
reserve()設(shè)置Vector最小的元素容納數(shù)量
resize()改變Vector元素數(shù)量的大小
size()返回Vector元素數(shù)量的大小
swap()交換兩個Vector

2. 庫函數(shù)詳解

構(gòu)造函數(shù)

語法:
vector();vector( size_type num, const TYPE &val );vector( const vector &from );vector( input_iterator start, input_iterator end );

C++ Vectors可以使用以下任意一種參數(shù)方式構(gòu)造:

  • 無參數(shù) - 構(gòu)造一個空的vector,
  • 數(shù)量(num)和值(val) - 構(gòu)造一個初始放入num個值為val的元素的Vector
  • vector(from) - 構(gòu)造一個與vector from 相同的vector
  • 迭代器(start)和迭代器(end) - 構(gòu)造一個初始值為[start,end)區(qū)間元素的Vector(注:半開區(qū)間).

舉例,下面這個實例構(gòu)造了一個包含5個值為42的元素的Vector

vector<int> v1( 5, 42 );



運算符

語法:
v1 == v2v1 != v2v1 <= v2v1 >= v2v1 < v2v1 > v2 v[]

C++ Vectors能夠使用標(biāo)準(zhǔn)運算符: ==, !=, <=, >=, <, 和 >. 要訪問vector中的某特定位置的元素可以使用 [] 操作符.

兩個vectors被認(rèn)為是相等的,如果:

  • 它們具有相同的容量
  • 所有相同位置的元素相等.
  • vectors之間大小的比較是按照詞典規(guī)則.

    相關(guān)內(nèi)容: at().?

    assign函數(shù)

    語法:
    void assign( input_iterator start, input_iterator end );void assign( size_type num, const TYPE &val );

    assign() 函數(shù)要么將區(qū)間[start, end)的元素賦到當(dāng)前vector,或者賦num個值為val的元素到vector中.這個函數(shù)將會清除掉為vector賦值以前的內(nèi)容.

    ?


    at函數(shù)

    語法:
    TYPE at( size_type loc );

    at() 函數(shù) 返回當(dāng)前Vector指定位置loc的元素的引用. at() 函數(shù) 比 [] 運算符更加安全, 因為它不會讓你去訪問到Vector內(nèi)越界的元素. 例如, 考慮下面的代碼:

    vector<int> v( 5, 1 );for( int i = 0; i < 10; i++ ) {cout << "Element " << i << " is " << v[i] << endl; }這段代碼訪問了vector末尾以后的元素,這將可能導(dǎo)致很危險的結(jié)果.以下的代碼將更加安全: vector<int> v( 5, 1 );for( int i = 0; i < 10; i++ ) {cout << "Element " << i << " is " << v.at(i) << endl; }

    取代試圖訪問內(nèi)存里非法值的作法,at() 函數(shù)能夠辨別出訪問是否越界并在越界的時候拋出一個異常.

    相關(guān)內(nèi)容: [] 操作符


    back 函數(shù)

    語法:
    TYPE back();

    back() 函數(shù)返回當(dāng)前vector最末一個元素的引用.例如:

    vector<int> v;for( int i = 0; i < 5; i++ ) {v.push_back(i); }cout << "The first element is " << v.front() << " and the last element is " << v.back() << endl;

    這段代碼產(chǎn)生如下結(jié)果:

    The first element is 0 and the last element is 4 相關(guān)內(nèi)容: front().

    begin 函數(shù)

    語法:
    iterator begin();

    begin()函數(shù)返回一個指向當(dāng)前vector起始元素的迭代器.例如,下面這段使用了一個迭代器來顯示出vector中的所有元素:

    vector<int> v1( 5, 789 ); vector<int>::iterator it; for( it = v1.begin(); it != v1.end(); it++ )cout << *it << endl; 相關(guān)內(nèi)容: end().

    capacity 函數(shù)

    語法:
    size_type capacity();

    capacity() 函數(shù) 返回當(dāng)前vector在重新進行內(nèi)存分配以前所能容納的元素數(shù)量.


    clear 函數(shù)

    語法:
    void clear();

    clear()函數(shù)刪除當(dāng)前vector中的所有元素.


    empty 函數(shù)

    語法:
    bool empty();

    如果當(dāng)前vector沒有容納任何元素,則empty()函數(shù)返回true,否則返回false.例如,以下代碼清空一個vector,并按照逆序顯示所有的元素:

    vector<int> v;for( int i = 0; i < 5; i++ ) {v.push_back(i);}while( !v.empty() ) {cout << v.back() << endl;v.pop_back();} 相關(guān)內(nèi)容: size()

    end 函數(shù)

    語法:
    iterator end();

    end() 函數(shù)返回一個指向當(dāng)前vector末尾元素的下一位置的迭代器.注意,如果你要訪問末尾元素,需要先將此迭代器自減1.

    相關(guān)內(nèi)容: begin()


    erase 函數(shù)

    語法:
    iterator erase( iterator loc );iterator erase( iterator start, iterator end );
    erase函數(shù)要么刪作指定位置loc的元素,要么刪除區(qū)間[start, end)的所有元素.返回值是指向刪除的最后一個元素的下一位置的迭代器.例如:

    // 創(chuàng)建一個vector,置入字母表的前十個字符 vector<char> alphaVector; for( int i=0; i < 10; i++ )alphaVector.push_back( i + 65 ); int size = alphaVector.size();vector<char>::iterator startIterator; vector<char>::iterator tempIterator;for( int i=0; i < size; i++ ) {tartIterator = alphaVector.begin();alphaVector.erase( startIterator );// Display the vectorfor( tempIterator = alphaVector.begin(); tempIterator != alphaVector.end(); tempIterator++ )cout << *tempIterator;cout << endl; }

    這段代碼將會顯示如下輸出:

    BCDEFGHIJ CDEFGHIJ DEFGHIJ EFGHIJ FGHIJ GHIJ HIJ IJ J 相關(guān)內(nèi)容: pop_back().

    front 函數(shù)

    語法:
    TYPE front();

    front()函數(shù)返回當(dāng)前vector起始元素的引用

    相關(guān)內(nèi)容: back().


    get_allocator 函數(shù)

    語法:
    allocator_type get_allocator();

    get_allocator() 函數(shù)返回當(dāng)前vector的內(nèi)存分配器.


    insert 函數(shù)

    語法:
    iterator insert( iterator loc, const TYPE &val );void insert( iterator loc, size_type num, const TYPE &val );void insert( iterator loc, input_iterator start, input_iterator end );

    insert() 函數(shù)有以下三種用法:

    • 在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器,
    • 在指定位置loc前插入num個值為val的元素
    • 在指定位置loc前插入?yún)^(qū)間[start, end)的所有元素 .
    舉例:

    //創(chuàng)建一個vector,置入字母表的前十個字符 vector<char> alphaVector; for( int i=0; i < 10; i++ )alphaVector.push_back( i + 65 );//插入四個C到vector中 vector<char>::iterator theIterator = alphaVector.begin(); alphaVector.insert( theIterator, 4, 'C' );//顯示vector的內(nèi)容 for( theIterator = alphaVector.begin(); theIterator != alphaVector.end(); theIterator++ )cout << *theIterator;

    這段代碼將顯示:

    CCCCABCDEFGHIJ

    max_size 函數(shù)

    語法:
    size_type max_size();

    max_size() 函數(shù)返回當(dāng)前vector所能容納元素數(shù)量的最大值(譯注:包括可重新分配內(nèi)存).


    pop_back

    語法:
    void pop_back();

    pop_back()函數(shù)刪除當(dāng)前vector最末的一個元素,例如:

    vector<char> alphaVector; for( int i=0; i < 10; i++ )alphaVector.push_back( i + 65 );int size = alphaVector.size(); vector<char>::iterator theIterator; for( int i=0; i < size; i++ ) {alphaVector.pop_back();for( theIterator = alphaVector.begin(); theIterator != alphaVector.end(); theIterator++ )cout << *theIterator;cout << endl; }

    這段代碼將顯示以下輸出:

    ABCDEFGHI ABCDEFGH ABCDEFG ABCDEF ABCDE ABCD ABC AB A 相關(guān)內(nèi)容: erase().

    push_back 函數(shù)

    語法:
    void push_back( const TYPE &val );

    push_back()添加值為val的元素到當(dāng)前vector末尾


    rbegin 函數(shù)

    語法:
    reverse_iterator rbegin();

    rbegin函數(shù)返回指向當(dāng)前vector末尾的逆迭代器.(譯注:實際指向末尾的下一位置,而其內(nèi)容為末尾元素的值,詳見逆代器相關(guān)內(nèi)容)


    rend 函數(shù)

    語法:
    reverse_iterator rend();

    rend()函數(shù)返回指向當(dāng)前vector起始位置的逆迭代器.


    reserve 函數(shù)

    語法:
    void reserve( size_type size );

    reserve()函數(shù)為當(dāng)前vector預(yù)留至少共容納size個元素的空間.(譯注:實際空間可能大于size)


    resize 函數(shù)

    語法:
    void resize( size_type size, TYPE val );

    resize() 函數(shù)改變當(dāng)前vector的大小為size,且對新創(chuàng)建的元素賦值val


    size 函數(shù)

    語法:
    size_type size();

    size() 函數(shù)返回當(dāng)前vector所容納元素的數(shù)目

    相關(guān)內(nèi)容: empty()


    swap 函數(shù)

    語法:
    void swap( vector &from );

    swap()函數(shù)交換當(dāng)前vector與vector from的元素


    總結(jié)

    以上是生活随笔為你收集整理的【C++】 C++标准模板库(一) Vector的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。