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

詳解C++ STL vector容器訪問元素的幾種方式

 更新時間:2021年05月01日 10:19:40   投稿:zx  
這篇文章主要介紹了詳解C++ STL vector容器訪問元素的幾種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

學(xué)會如何創(chuàng)建并初始化 vector 容器之后,本節(jié)繼續(xù)來學(xué)習(xí)如何獲取(甚至修改)容器中存儲的元素。

訪問vector容器中單個元素

首先,vector 容器可以向普通數(shù)組那樣訪問存儲的元素,甚至對指定下標處的元素進行修改,比如:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    //獲取容器中首個元素
    cout << values[0] << endl;
    //修改容器中下標為 0 的元素的值
    values[0] = values[1] + values[2] + values[3] + values[4];
    cout << values[0] << endl;
    return 0;
}

運行結(jié)果為:
1
14

顯然,vector 的索引從 0 開始,這和普通數(shù)組一樣。通過使用索引,總是可以訪問到 vector 容器中現(xiàn)有的元素。

值得一提的是,容器名[n]這種獲取元素的方式,需要確保下標 n 的值不會超過容器的容量(可以通過 capacity() 成員函數(shù)獲取),否則會發(fā)生越界訪問的錯誤。幸運的是,和 array 容器一樣,vector 容器也提供了 at() 成員函數(shù),當傳給 at() 的索引會造成越界時,會拋出std::out_of_range異常。

舉個例子:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    //獲取容器中首個元素
    cout << values.at(0) << endl;
    //修改容器中下標為 0 的元素的值
    values.at(0) = values.at(1) + values.at(2) + values.at(3) + values.at(4);
    cout << values.at(0) << endl;
    //下面這條語句會發(fā)生 out_of_range 異常
    //cout << values.at(5) << endl;
    return 0;
}

運行結(jié)果為:
1
14

讀者可能有這樣一個疑問,即為什么 vector 容器在重載 [] 運算符時,沒有實現(xiàn)邊界檢查的功能呢?答案很簡單,因為性能。如果每次訪問元素,都去檢查索引值,無疑會產(chǎn)生很多開銷。當不存在越界訪問的可能時,就能避免這種開銷。

除此之外,vector 容器還提供了 2 個成員函數(shù),即 front() 和 back(),它們分別返回 vector 容器中第一個和最后一個元素的引用,通過利用這 2 個函數(shù)返回的引用,可以訪問(甚至修改)容器中的首尾元素。

舉個例子:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    cout << "values 首元素為:" << values.front() << endl;
    cout << "values 尾元素為:" << values.back() << endl;
    //修改首元素
    values.front() = 10;
    cout <<"values 新的首元素為:" << values.front() << endl;
    //修改尾元素
    values.back() = 20;
    cout << "values 新的尾元素為:" << values.back() << endl;
    return 0;
}

輸出結(jié)果為:
values 首元素為:1
values 尾元素為:5
values 新的首元素為:10
values 新的尾元素為:20

另外,vector 容器還提供了 data() 成員函數(shù),該函數(shù)的功能是返回指向容器中首個元素的指針。通過該指針也可以訪問甚至修改容器中的元素。比如:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    //輸出容器中第 3 個元素的值
    cout << *(values.data() + 2) << endl;
    //修改容器中第 2 個元素的值
    *(values.data() + 1) = 10;
    cout << *(values.data() + 1) << endl;
    return 0;
}

運行結(jié)果為:
3
10

訪問vector容器中多個元素

如果想訪問 vector 容器中多個元素,可以借助 size() 成員函數(shù),該函數(shù)可以返回 vector 容器中實際存儲的元素個數(shù)。例如:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    //從下標 0 一直遍歷到 size()-1 處
    for (int i = 0; i < values.size(); i++) {
        cout << values[i] << " ";
    }
    return 0;
}

運行結(jié)果為:
1 2 3 4 5

注意,這里不要使用 capacity() 成員函數(shù),因為它返回的是 vector 容器的容量,而不是實際存儲元素的個數(shù),這兩者是有差別的。
關(guān)于 vector 容器 capacity() 和 size() 的差別,可以閱讀 《STL vector容量(capacity)和大?。╯ize)的區(qū)別》一文。

或者也可以使用基于范圍的循環(huán),此方式將會逐個遍歷容器中的元素。比如:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    for (auto&& value : values)
        cout << value << " ";
    return 0;
}

運行結(jié)果為:
1 2 3 4 5

另外還可以使用 vector 迭代器遍歷 vector 容器,這里以 begin()/end() 為例:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    for (auto first = values.begin(); first < values.end(); ++first) {
        cout << *first << " ";
    }
    return 0;
}

運行結(jié)果為:
1 2 3 4 5

當然,這里也可以使用 rbegin()/rend()、cbegin()/cend()、crbegin()/crend() 以及全局函數(shù) begin()/end() ,它們都可以實現(xiàn)對容器中元素的訪問。

到此這篇關(guān)于詳解C++ STL vector容器訪問元素的幾種方式的文章就介紹到這了,更多相關(guān)C++ STL vector容器訪問元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++編譯器無法捕捉到的8種錯誤實例分析

    C++編譯器無法捕捉到的8種錯誤實例分析

    這篇文章主要介紹了C++編譯器無法捕捉到的8種錯誤,是深入學(xué)習(xí)C++所必須加以掌握的排錯技能,需要的朋友可以參考下
    2014-09-09
  • VC通過托盤圖標得到該所屬進程的實現(xiàn)代碼

    VC通過托盤圖標得到該所屬進程的實現(xiàn)代碼

    這篇文章主要介紹了VC通過托盤圖標得到該所屬進程的實現(xiàn)代碼,為了方便大家使用特將多個代碼分享給大家,需要的朋友可以參考下
    2021-10-10
  • opencv2實現(xiàn)10張圖像上下左右拼接融合

    opencv2實現(xiàn)10張圖像上下左右拼接融合

    這篇文章主要為大家詳細介紹了opencv2實現(xiàn)10張圖像上下左右拼接融合,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++中l(wèi)ist的使用與模擬實現(xiàn)

    C++中l(wèi)ist的使用與模擬實現(xiàn)

    list相較于vector來說會顯得復(fù)雜,它的好處是在任意位置插入,刪除都是一個O(1)的時間復(fù)雜度,下面這篇文章主要給大家介紹了關(guān)于C++中l(wèi)ist的使用與模擬實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • C語言實現(xiàn)簡易文本編輯器

    C語言實現(xiàn)簡易文本編輯器

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易文本編輯器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C語言解決螺旋矩陣算法問題的代碼示例

    C語言解決螺旋矩陣算法問題的代碼示例

    這篇文章主要介紹了C語言解決螺旋矩陣算法問題的代碼示例,螺旋矩陣中的數(shù)字由第一行開始到右邊不斷變大,向下變大,向左變大,向上變大,如此循環(huán)...需要的朋友可以參考下
    2016-04-04
  • 詳解在VScode中添加代碼塊(含C++指令生成代碼)

    詳解在VScode中添加代碼塊(含C++指令生成代碼)

    這篇文章主要介紹了詳解在VScode中添加代碼塊(含C++指令生成代碼),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C++實現(xiàn)銀行排隊系統(tǒng)

    C++實現(xiàn)銀行排隊系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)銀行排隊系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C++連接數(shù)據(jù)庫SqlServer、MySql、Oracle、Access、SQLite、PostgreSQL、MongoDB、Redis

    C++連接數(shù)據(jù)庫SqlServer、MySql、Oracle、Access、SQLite、PostgreSQL、Mong

    C++是一種通用的編程語言,可以使用不同的庫和驅(qū)動程序來連接各種數(shù)據(jù)庫,以下是一些示例代碼,演示如何使用?C++?連接?SQL?Server、MySQL、Oracle、ACCESS、SQLite?、?PostgreSQL、MongoDB、Redis數(shù)據(jù)庫
    2024-08-08
  • C語言數(shù)字圖像處理之圖像縮放

    C語言數(shù)字圖像處理之圖像縮放

    這篇文章主要為大家詳細介紹了C語言數(shù)字圖像處理之圖像縮放,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論

阳春市| 铁力市| 万安县| 德江县| 阳江市| 延庆县| 买车| 抚州市| 鹤岗市| 福海县| 潼南县| 湟源县| 德化县| 高淳县| 阿鲁科尔沁旗| 西林县| 保定市| 台山市| 凤山市| 开化县| 德州市| 山西省| 宣威市| 德清县| 昔阳县| 涟水县| 浙江省| 宝兴县| 沙洋县| 余干县| 分宜县| 桐梓县| 沾化县| 阜康市| 沾益县| 望江县| 阿克苏市| 天镇县| 许昌县| 凤山县| 罗平县|