亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++ STL array容器訪問(wèn)元素的幾種方式

 更新時(shí)間:2021年01月21日 10:43:00   作者:c語(yǔ)言中文網(wǎng)  
這篇文章主要介紹了C++ STL array容器訪問(wèn)元素的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

當(dāng) array 容器創(chuàng)建完成之后,最常做的操作就是獲取其中的元素,甚至有時(shí)還會(huì)通過(guò)循環(huán)結(jié)構(gòu)獲取多個(gè)元素。本節(jié)就對(duì)獲取容器中元素的方法做個(gè)匯總。

訪問(wèn)array容器中單個(gè)元素

首先,可以通過(guò)容器名[]的方式直接訪問(wèn)和使用容器中的元素,這和 C++ 標(biāo)準(zhǔn)數(shù)組訪問(wèn)元素的方式相同,例如:

values[4] = values[3] + 2.O*values[1];

此行代碼中,第 5 個(gè)元素的值被賦值為右邊表達(dá)式的值。需要注意的是,使用如上這樣方式,由于沒(méi)有做任何邊界檢查,所以即便使用越界的索引值去訪問(wèn)或存儲(chǔ)元素,也不會(huì)被檢測(cè)到。

為了能夠有效地避免越界訪問(wèn)的情況,可以使用 array 容器提供的 at() 成員函數(shù),例如 :

values.at (4) = values.at(3) + 2.O*values.at(1);

這行代碼和前一行語(yǔ)句實(shí)現(xiàn)的功能相同,其次當(dāng)傳給 at() 的索引是一個(gè)越界值時(shí),程序會(huì)拋出 std::out_of_range 異常。因此當(dāng)需要訪問(wèn)容器中某個(gè)指定元素時(shí),建議大家使用 at(),除非確定索引沒(méi)有越界。

讀者可能有這樣一個(gè)疑問(wèn),即為什么 array 容器在重載 [] 運(yùn)算符時(shí),沒(méi)有實(shí)現(xiàn)邊界檢查的功能呢?答案很簡(jiǎn)單,因?yàn)樾阅堋H绻看卧L問(wèn)元素,都去檢查索引值,無(wú)疑會(huì)產(chǎn)生很多開(kāi)銷。當(dāng)不存在越界訪問(wèn)的可能時(shí),就能避免這種開(kāi)銷。

除此之外,array 容器還提供了 get<n> 模板函數(shù),它是一個(gè)輔助函數(shù),能夠獲取到容器的第 n 個(gè)元素。需要注意的是,該模板函數(shù)中,參數(shù)的實(shí)參必須是一個(gè)在編譯時(shí)可以確定的常量表達(dá)式,所以它不能是一個(gè)循環(huán)變量。也就是說(shuō),它只能訪問(wèn)模板參數(shù)指定的元素,編譯器在編譯時(shí)會(huì)對(duì)它進(jìn)行檢查。

下面代碼展示了如何使用 get<n> 模板函數(shù):

#include <iostream>
#include <array>
#include <string>
using namespace std;
int main()
{
  array<string, 5> words{ "one","two","three","four","five" };
  cout << get<3>(words) << endl; // Output words[3]
  //cout << get<6>(words) << std::endl; //越界,會(huì)發(fā)生編譯錯(cuò)誤
  return 0;
}

運(yùn)行結(jié)果為:
four

另外,array 容器提供了 data() 成員函數(shù),通過(guò)調(diào)用該函數(shù)可以得到指向容器首個(gè)元素的指針。通過(guò)該指針,我們可以獲得容器中的各個(gè)元素,例如:

#include <iostream>
#include <array>
using namespace std;
int main()
{
  array<int, 5> words{1,2,3,4,5};
  cout << *( words.data()+1);
  return 0;
}

運(yùn)行結(jié)果為:
2

訪問(wèn)array容器中多個(gè)元素

我們知道,array 容器提供的 size() 函數(shù)能夠返回容器中元素的個(gè)數(shù)(函數(shù)返回值為 size_t 類型),所以能夠像下面這樣去逐個(gè)提取容器中的元素,并計(jì)算它們的和:

double total = 0;
for(size_t i = 0 ; i < values.size() ; ++i)
{
  total += values[i];
}

size() 函數(shù)的存在,為 array 容器提供了標(biāo)準(zhǔn)數(shù)組所沒(méi)有的優(yōu)勢(shì),即能夠知道它包含多少元素。

并且,接受數(shù)組容器作為參數(shù)的函數(shù),只需要通過(guò)調(diào)用容器的成員函數(shù) size(),就能得到元素的個(gè)數(shù)。除此之外,通過(guò)調(diào)用 array 容器的 empty() 成員函數(shù),即可知道容器中有沒(méi)有元素(如果容器中沒(méi)有元素,此函數(shù)返回 true),如下所示:

if(values.empty())
  std::cout << "The container has no elements.\n";
else
  std::cout << "The container has "<< values.size()<<"elements.\n";

然而,很少會(huì)創(chuàng)建空的 array 容器,因?yàn)楫?dāng)生成一個(gè) array 容器時(shí),它的元素個(gè)數(shù)就固定了,而且無(wú)法改變,所以生成空 array 容器的唯一方法是將模板的第二個(gè)參數(shù)指定為 0,但這種情況基本不可能發(fā)生。

array 容器之所以提供 empty() 成員函數(shù)的原因,對(duì)于其他元素可變或者元素可刪除的容器(例如 vector、deque 等)來(lái)說(shuō),它們使用 empty() 時(shí)的機(jī)制是一樣的,因此為它們提供了一個(gè)一致性的操作。

除了借助 size() 外,對(duì)于任何可以使用迭代器的容器,都可以使用基于范圍的循環(huán),因此能夠更加簡(jiǎn)便地計(jì)算容器中所有元素的和,比如:

double total = 0;
for(auto&& value : values)
  total += value;

下面是一個(gè)示例,展示了本節(jié)關(guān)于如何獲取 array 容器中元素所講到的知識(shí):

#include <iostream>
#include <iomanip> 
#include <array>
using namespace std;
int main()
{
  array<int, 5> values1;
  array<int, 5> values2;
  //初始化 values1 為 {0,1,2,3,4}
  for (size_t i = 0; i < values1.size(); ++i)
  {
    values1.at(i) = i;
  }
  cout << "values1[0] is : " << values1[0] << endl;
  cout << "values1[1] is : " << values1.at(1) << endl;
  cout << "values1[2] is : " << get<2>(values1) << endl;
  //初始化 values2 為{10,11,12,13,14}
  int initvalue = 10;
  for (auto& value : values2)
  {
    value = initvalue;
    initvalue++;
  }
  cout << "Values1 is : ";
  for (auto i = values1.begin(); i < values1.end(); i++) {
    cout << *i << " ";
  }
  cout << endl << "Values2 is : ";
  for (auto i = values2.begin(); i < values2.end(); i++) {
    cout << *i << " ";
  }
  return 0;
}

運(yùn)行結(jié)果為:

values1[0] is : 0
values1[1] is : 1
values1[2] is : 2
Values1 is : 0 1 2 3 4
Values2 is : 10 11 12 13 14

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

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)鏈表貪吃蛇

    C語(yǔ)言實(shí)現(xiàn)鏈表貪吃蛇

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)鏈表貪吃蛇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Qt計(jì)時(shí)器使用方法詳解

    Qt計(jì)時(shí)器使用方法詳解

    這篇文章為大家詳細(xì)主要介紹了Qt計(jì)時(shí)器的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++數(shù)據(jù)結(jié)構(gòu)之單鏈表

    C++數(shù)據(jù)結(jié)構(gòu)之單鏈表

    這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之單鏈表,鏈表是由一個(gè)個(gè)結(jié)點(diǎn)鏈結(jié)成的。結(jié)點(diǎn)包括數(shù)據(jù)域和指針域兩部分,數(shù)據(jù)域用來(lái)存儲(chǔ)數(shù)據(jù)元素的信息,指針域用來(lái)存儲(chǔ)下一個(gè)結(jié)點(diǎn)的地址,更詳細(xì)內(nèi)容請(qǐng)需要的小伙伴參考下面文章內(nèi)容
    2022-01-01
  • C++ Vector 動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)

    C++ Vector 動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)

    這篇文章主要介紹了C++ Vector 動(dòng)態(tài)數(shù)組的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 淺談c++性能測(cè)試工具google benchmark

    淺談c++性能測(cè)試工具google benchmark

    本文將會(huì)介紹如何使用模板以及參數(shù)生成器來(lái)批量生成測(cè)試用例,簡(jiǎn)化繁瑣的性能測(cè)試代碼
    2021-06-06
  • C++11返回類型后置語(yǔ)法的使用示例

    C++11返回類型后置語(yǔ)法的使用示例

    本篇文章主要介紹了C++11返回類型后置語(yǔ)法的使用示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • C++中declspec(dllexport)和declspec(dllimport)?的用法介紹

    C++中declspec(dllexport)和declspec(dllimport)?的用法介紹

    這篇文章介紹了C++中declspec(dllexport)和declspec(dllimport)?的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C語(yǔ)言結(jié)構(gòu)體struct詳解

    C語(yǔ)言結(jié)構(gòu)體struct詳解

    C語(yǔ)言中,結(jié)構(gòu)體類型屬于一種構(gòu)造類型(其他的構(gòu)造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 基于Qt制作一個(gè)定時(shí)關(guān)機(jī)的小程序

    基于Qt制作一個(gè)定時(shí)關(guān)機(jī)的小程序

    這篇文章主要為大家詳細(xì)介紹了如何基于Qt制作一個(gè)有趣的定時(shí)關(guān)機(jī)的小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • C++繼承的定義與注意事項(xiàng)

    C++繼承的定義與注意事項(xiàng)

    這篇文章主要給大家介紹了關(guān)于C++繼承的定義與注意事項(xiàng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評(píng)論