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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

c/c++

c++ array 模板类使用

發(fā)布時(shí)間:2024/4/18 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ array 模板类使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1、array模板類(lèi)的定義

(1)array模板類(lèi)的聲明

(2)容器屬性

(3)array模板類(lèi)的說(shuō)明

(4)array模板類(lèi)頭文件

2、array模板類(lèi)的使用

(1)Iterators

(2)Capacity

(3)Element access

(4)Modifiers

(5)Compare

(6)Other

本章是對(duì)c++ array模板類(lèi)的知識(shí)歸納,講述了c++中array模板類(lèi)的使用,不涉及原理方面的內(nèi)容。

c++中的數(shù)組類(lèi)型是繼承了c語(yǔ)言的特性,在使用數(shù)組的時(shí)候要注意數(shù)組越界操作問(wèn)題。為了更安全的對(duì)數(shù)組進(jìn)行操作,c++提出了數(shù)組模板類(lèi)array。

1、array模板類(lèi)的定義
(1)array模板類(lèi)的聲明
template <class T,size_t N> class array;
數(shù)組類(lèi)是固定大小的序列容器,它們包含以嚴(yán)格線性序列排序的特定數(shù)量的元素。數(shù)組類(lèi)具有固定大小,并且不通過(guò)分配器管理其元素的分配,它們是封裝固定大小元素?cái)?shù)組的聚合類(lèi)型。

(2)容器屬性
序列容器中的元素按嚴(yán)格的線性順序排序。各個(gè)元素按其順序訪問(wèn)它們的位置。
元素存儲(chǔ)在連續(xù)的存儲(chǔ)器位置,允許對(duì)元素進(jìn)行恒定時(shí)間隨機(jī)訪問(wèn)。可以偏移元素的指針以訪問(wèn)其他元素。
容器使用隱式構(gòu)造函數(shù)和析構(gòu)函數(shù)靜態(tài)分配所需的空間。它的大小是編譯時(shí)常量。沒(méi)有內(nèi)存或時(shí)間開(kāi)銷(xiāo)。
(3)array模板類(lèi)的說(shuō)明
array模板類(lèi)中T為包含元素的類(lèi)型(std::array::value_type),N為元素個(gè)數(shù)。

(4)array模板類(lèi)頭文件
使用array模板類(lèi)之前需要包含#include <array>頭文件!

2、array模板類(lèi)的使用
(1)Iterators
Iterators迭代器的作用是遍歷array數(shù)組類(lèi)中的元素。可以通過(guò)begin/end()、rbegin/rend()、cbegin/cend()、crbegin/crend()等函數(shù)進(jìn)行訪問(wèn)。

begin?? ?Return iterator to beginning
end?? ?Return iterator to end
rbegin?? ?Return reverse iterator to reverse beginning
rend?? ?Return reverse iterator to reverse end
cbegin?? ?Return const_iterator to beginning
cend?? ?Return const_iterator to end
crbegin?? ?Return const_reverse_iterator to reverse beginning
crend?? ?Return const_reverse_iterator to reverse end
參考代碼如下所示:

/*****************************************************
Copyright (C) 2018. All rights reserved.
File name ? ? : array.cpp
Version ? ? ? : v1.0
Author ? ? ? ?: zhengqijun
Date ? ? ? ? ?: 2018-08-10
Function List :
Description ? : array container.
******************************************************/
?
#include <iostream>
#include <array>
?
int main(void) {
? ? std::array<int, 5> arr = {1, 2, 3, 4, 5};
?
? ? std::cout << "array values: ";
? ? for (auto it = arr.begin(); it != arr.end(); ++it) {
? ? ? ? std::cout << *it << " ";
? ? }
? ? std::cout << std::endl;
?
? ? return 0;
}
運(yùn)行結(jié)果如下所示:

array values: 1 2 3 4 5
(2)Capacity
array數(shù)組容器的大小是固定的。可以通過(guò)sizeof()、size()、max_size()、empty()等函數(shù)進(jìn)行檢測(cè)。

size?? ?Return size
max_size?? ?Return maximum size
empty?? ?Test whether list is empty
測(cè)試array數(shù)組容器大小的參考代碼如下所示:

/*****************************************************
Copyright (C) 2018. All rights reserved.
File name ? ? : array.cpp
Version ? ? ? : v1.0
Author ? ? ? ?: zhengqijun
Date ? ? ? ? ?: 2018-08-10
Function List :
Description ? : array container.
******************************************************/
?
#include <iostream>
#include <array>
?
int main(void) {
? ? std::array<int, 5> arr = {1, 2, 3, 4, 5};
?
? ? std::cout << "sizeof(array) = " << sizeof(arr) << std::endl;
? ? std::cout << "size of array = " << arr.size() << std::endl;
? ? std::cout << "max_size of array = " << arr.max_size() << std::endl;
?
? ? if (arr.empty()) {
? ? ? ? std::cout << "array is empty!" << std::endl;
? ? } else {
? ? ? ? std::cout << "array is not empty!" << std::endl;
? ? }
?
? ? return 0;
}
運(yùn)行結(jié)果如下所示:

sizeof(array) = 20
size of array = 5
max_size of array = 5
array is not empty!
(3)Element access
可以通過(guò)下標(biāo)[ ]、at()、front()、back()、data()等函數(shù)訪問(wèn)array容器內(nèi)的元素。

operator[ ]?? ?Access element
at?? ?Access element 
front?? ?Access first element
back?? ?Access last element
data?? ?Get pointer to first data
參考代碼如下:

/*****************************************************
Copyright (C) 2018. All rights reserved.
File name ? ? : array.cpp
Version ? ? ? : v1.0
Author ? ? ? ?: zhengqijun
Date ? ? ? ? ?: 2018-08-10
Function List :
Description ? : array container.
******************************************************/
?
#include <iostream>
#include <array>
?
int main(void) {
? ? std::array<int, 5> arr = {1, 2, 3, 4, 5};
?
? ? std::cout << "array[0] = " << arr[0] << std::endl;
? ? std::cout << "array.at(4) = " << arr.at(4) << std::endl;
? ? std::cout << "array.front() = " << arr.front() << std::endl;
? ? std::cout << "array.back() = " << arr.back() << std::endl;
? ? std::cout << "&array: " << arr.data() << " = " << &arr << std::endl;
?
? ? return 0;
}
運(yùn)行結(jié)果如下所示:

array[0] = 1
array.at(4) = 5
array.front() = 1
array.back() = 5
&array: 0x7ffd22df6e50 = 0x7ffd22df6e50
(4)Modifiers
可以使用fill()、swap()等函數(shù)對(duì)array容器整體進(jìn)行操作。

fill?? ?Fill array with value
swap?? ?Swap content
參考代碼如下所示:

/*****************************************************
Copyright (C) 2018. All rights reserved.
File name ? ? : array.cpp
Version ? ? ? : v1.0
Author ? ? ? ?: zhengqijun
Date ? ? ? ? ?: 2018-08-10
Function List :
Description ? : array container.
******************************************************/
?
#include <iostream>
#include <array>
?
int main(void) {
? ? std::array<int, 5> arr;
?
? ? arr.fill(5); ?// fill
?
? ? std::cout << "array values: ";
? ? for (auto i : arr) {
? ? ? ? std::cout << i << " ";
? ? }
? ? std::cout << std::endl;
?
? ? std::array<int, 3> first = {1, 2, 3};
? ? std::array<int, 3> second = {6, 5, 4};
?
? ? std::cout << "first ?array values: ";
? ? for (auto it = first.begin(); it != first.end(); ++it) {
? ? ? ? std::cout << *it << " ";
? ? }
? ? std::cout << std::endl;
?
? ? std::cout << "second array values: ";
? ? for (auto it = second.begin(); it != second.end(); ++it) {
? ? ? ? std::cout << *it << " ";
? ? }
? ? std::cout << std::endl;
?
? ? first.swap(second); ?// swap
?
? ? std::cout << "swap array success!" << std::endl;
?
? ? std::cout << "first ?array values: ";
? ? for (auto it = first.begin(); it != first.end(); ++it) {
? ? ? ? std::cout << *it << " ";
? ? }
? ? std::cout << std::endl;
?
? ? std::cout << "second array values: ";
? ? for (auto it = second.begin(); it != second.end(); ++it) {
? ? ? ? std::cout << *it << " ";
? ? }
? ? std::cout << std::endl;
?
? ? return 0;
}
運(yùn)行結(jié)果如下所示:

array values: 5 5 5 5 5?
first ?array values: 1 2 3?
second array values: 6 5 4?
swap array success!
first ?array values: 6 5 4?
second array values: 1 2 3?
(5)Compare
還可以使用>??<??==等符號(hào)對(duì)兩個(gè)array數(shù)組容器進(jìn)行比較。

/*****************************************************
Copyright (C) 2018. All rights reserved.
File name ? ? : array.cpp
Version ? ? ? : v1.0
Author ? ? ? ?: zhengqijun
Date ? ? ? ? ?: 2018-08-10
Function List :
Description ? : array container.
******************************************************/
?
#include <iostream>
#include <array>
?
int main(void) {
? ? std::array<int,5> a = {10, 20, 30, 40, 50};
? ? std::array<int,5> b = {10, 20, 30, 40, 50};
? ? std::array<int,5> c = {50, 40, 30, 20, 10};
?
? ? if (a == b) {
? ? ? ? std::cout << "a == b" << std::endl;
? ? } else {
? ? ? ? std::cout << "a != b" << std::endl;
? ? }
?
? ? if (a == c) {
? ? ? ? std::cout << "a == c" << std::endl;
? ? } else {
? ? ? ? std::cout << "a != c" << std::endl;
? ? }
?
? ? if (a < c) {
? ? ? ? std::cout << "a < c" << std::endl;
? ? } else {
? ? ? ? std::cout << "a >= c" << std::endl;
? ? }
?
? ? return 0;
}
?
運(yùn)行結(jié)果如下所示:

a == b
a != c
a < c
(6)Other
c++重載了get()函數(shù)來(lái)訪問(wèn)數(shù)組容器中的元素,為了和元組相似,還重載了tuple_size和tuple_element類(lèi)型。

get( array)?? ?Get element (tuple interface)
tuple_element<array>?? ?Tuple element type for array
tuple_size<array>?? ?Tuple size traits for array
參考代碼如下所示:

/*****************************************************
Copyright (C) 2018. All rights reserved.
File name ? ? : array.cpp
Version ? ? ? : v1.0
Author ? ? ? ?: zhengqijun
Date ? ? ? ? ?: 2018-08-10
Function List :
Description ? : array container.
******************************************************/
?
#include <iostream>
#include <array>
#include <tuple>
?
int main(void) {
? ? std::array<int,3> myarray = {10, 20, 30};
? ? std::tuple<int, int, int> mytuple (10, 20, 30);
?
? ? std::tuple_element<0, decltype(myarray)>::type myelement; ?// int myelement
?
? ? myelement = std::get<2>(myarray);
? ? std::get<2>(myarray) = std::get<0>(myarray);
? ? std::get<0>(myarray) = myelement;
?
? ? std::cout << "first element in myarray: " << std::get<0>(myarray) << std::endl;
? ? std::cout << "first element in mytuple: " << std::get<0>(mytuple) << std::endl;
?
? ? return 0;
}
運(yùn)行結(jié)果如下所示:

first element in myarray: 30
first element in mytuple: 10
建議:多使用array數(shù)組容器代替c類(lèi)型數(shù)組,使操作數(shù)組元素更加安全!
?

總結(jié)

以上是生活随笔為你收集整理的c++ array 模板类使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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