Array容器的相關(guān)知識(shí),array是一個(gè)順序容器,和其他標(biāo)準(zhǔn)容器相比它的特點(diǎn)是容器的大小固定,順序存儲(chǔ)。
1:array的構(gòu)造函數(shù)
array();
array(const array & right);
2:array的成員變量
Type DefinitionDescription
array::const_iteratorThe type of a? constant iterator for the controlled sequence.
array::const_pointerThe type of a? constant pointer to an element.
array::const_referenceThe type of a? constant reference to an element.
array::const_reverse_iteratorThe type of a? constant reverse iterator for the controlled sequence.
array::difference_typeThe type of a? signed distance between two elements.
array::iteratorThe type of an? iterator for the controlled sequence.
array::pointerThe type of a? pointer to an element.
array::referenceThe type of a? reference to an element.
array::reverse_iteratorThe type of a? reverse iterator for the controlled sequence.
array::size_typeThe type of an? unsigned distance between two elements.
array::value_typeThe type of an? element.
3:array的關(guān)于迭代器的成員函數(shù)
Iterators
beginReturn iterator to beginning(public member function )
endReturn iterator to end(public member function )
rbeginReturn reverseiterator to reverse beginning(public member function )
rendReturnreverse iterator to reverse end(public member function )
cbeginReturnconst_iterator to beginning(public member function )
cendReturnconst_iterator to end(public member function )
crbeginReturnconst_reverse_iterator to reverse beginning(public member
function )
crendReturnconst_reverse_iterator to reverse end(public member
function )
這些東西和list中迭代器都類似,在list篇中已經(jīng)做過大量介紹,這里就不再啰嗦了。
4:array中關(guān)于容量的函數(shù)
Capacity
sizeReturnsize(public member function )
max_sizeReturnmaximum size(public member function )
emptyTestwhether array is empty(public member function )
4.1 size()函數(shù)的用法,從結(jié)果中可以看出array容量的一些端倪來。
size_type size() const;
#include
#include
intmain ()
{
std::array myints;
std::cout <<"size of myints: "<< myints.size() << std::endl;
std::cout <<"sizeof(myints): "<
return0;
}
結(jié)果:
size of myints: 5
sizeof(myints): 20
4.2 max_size()函數(shù)的用法,說明這個(gè)函數(shù)和list中的max_size()的不同
size_type max_size() const;
#include
#include
intmain ()
{
std::array myints;
std::cout <<"size of myints: "<< myints.size() <<'\n';
std::cout <<"max_size of myints: "<< myints.max_size() <<'\n';
return0;
}
結(jié)果:
size of myints: 10
max_size of myints: 10
4.3 empty函數(shù)
bool empty() const;
5.a(chǎn)rray中關(guān)于元素操作的函數(shù)
Element access
operator[]Accesselement(public member function )
atAccesselement(public member function )
frontAccessfirst element(public member function )
backAccesslast element(public member function )
dataGetpointer to data(public member function )
5.1 operator[]操作符
reference operator[](size_type off);
const_reference operator[](size_type off) const;
示例:
#include
#include
intmain ()
{
std::array myarray;
unsignedinti;
for(i=0; i<10; i++) myarray[i]=i;// assign some values:
std::cout <<"myarray contains:";// print content
for(i=0; i<10; i++)
std::cout <<' '<< myarray[i];
std::cout <<'\n';
return0;
}
輸出結(jié)果:
myarray contains: 0 1 2 3 4 5 6 7 8 9
5.2 at()函數(shù)的用法
reference at(size_type off);
const_reference at(size_type off) const;
用法:
#include
#include
intmain ()
{
std::array myarray;
for(inti=0; i<10; i++)
myarray.at(i) = i+1;// assign some values:
std::cout <<"myarray contains:"http:// print content:;
for(inti=0; i<10; i++)
std::cout <<' '<< myarray.at(i);
std::cout <<'\n';
return0;
}
輸出結(jié)果:
myarray contains: 1 2 3 4 5 6 7 8 9 10
5.3 front函數(shù)的用法
reference front();
const_reference front() const;
示例:
#include
#include
intmain ()
{
std::array myarray = {2, 16, 77};
std::cout <<"front is: "<< myarray.front() << std::endl;// 2
std::cout <<"back is: "<< myarray.back() << std::endl;// 77
myarray.front() = 100;
std::cout <<"myarray now contains:";
for(int& x : myarray ) std::cout <<' '<< x;
std::cout <<'\n';
return0;
}
結(jié)果:
front is: 2
back is: 77
myarray now contains: 100 16 77
5.4 back函數(shù)的用法
reference back();
const_reference back() const;
關(guān)于例子,在5.3中的例子已經(jīng)包含了
5.5 data函數(shù)的用法
Ty *data();
const Ty *data() const;
返回值指向第一個(gè)元素的指針,因?yàn)槭琼樞虼鎯?chǔ),所以知道了首元素的指針就可以知道所有元素了。
#include
#include
#include
intmain ()
{
constchar* cstr ="Test string";
std::array charray;
std::memcpy (charray.data(),cstr,12);
std::cout << charray.data() <<'\n';
return0;
}
結(jié)果:
Test string
6修改元素的函數(shù)
Modifiers
fillFill arraywith value(public member function )
swapSwap content(public member function )
6.1 fill函數(shù)的用法
void fill(const Type& _Val);
函數(shù)將array中所有的元素替換成_val
#include
#include
intmain () {
std::array myarray;
myarray.fill(5);
std::cout <<"myarray contains:";
for(int& x : myarray) { std::cout <<' '<< x; }
std::cout <<'\n';
return0;
}
結(jié)果:
myarray contains: 5 5 5 5 5 5
6.2 swap函數(shù)的用法
void swap(array& right);
交換兩個(gè)具有相同長度的array,切記兩個(gè)array的長度必須一致
例子:
#include
#include
intmain ()
{
std::array first = {10, 20, 30, 40, 50};
std::array second = {11, 22, 33, 44, 55};
first.swap (second);
std::cout <<"first:";
for(int& x : first) std::cout <<' '<< x;
std::cout <<'\n';
std::cout <<"second:";
for(int& x : second) std::cout <<' '<< x;
std::cout <<'\n';
return0;
}
結(jié)果:
first contains: 11 22 33 44 55
second contains: 10 20 30 40 50
附加頭文件中其他跟array類無關(guān)的類以及函數(shù)
1:tuple_element類
template
class tuple_element > {
typedef Ty type;
};
這個(gè)類就是獲取array中第幾個(gè)元素的值,示例如下:
#include
#include
typedef std::array Myarray;
int main()
{
Myarray c0 = {0, 1, 2, 3};
// display contents " 0 1 2 3"
for (Myarray::const_iterator it = c0.begin();
it != c0.end(); ++it)
std::cout << " " << *it;
std::cout << std::endl;
// display first element " 0"
std::tuple_element<0, Myarray>::type val = c0.front();
std::cout << " " << val;
std::cout << std::endl;
return (0);
}
結(jié)果:
0 1 2 3
0
2:tuple_size類
template
class tuple_size > {
static const unsigned value = N;
};
這個(gè)類就是獲取array數(shù)組的大小,示例
#include
#include
typedef std::array Myarray;
int main()
{
Myarray c0 = {0, 1, 2, 3};
// display contents " 0 1 2 3"
for (Myarray::const_iterator it = c0.begin();
it != c0.end(); ++it)
std::cout << " " << *it;
std::cout << std::endl;
// display size " 4"
std::cout << " " << std::tuple_size::value;
std::cout << std::endl;
return (0);
}
結(jié)果:
0 1 2 3
4
3:get函數(shù)的用法
template
Ty& get(array& arr);
template
const Ty& get(const array& arr);
這個(gè)函數(shù)就是返回array[id]的索引,示例
#include
#include
typedef std::array Myarray;
int main()
{
Myarray c0 = {0, 1, 2, 3};
// display contents " 0 1 2 3"
for (Myarray::const_iterator it = c0.begin();
it != c0.end(); ++it)
std::cout << " " << *it;
std::cout << std::endl;
// display odd elements " 1 3"
std::cout << " " << std::get<1>(c0);
std::cout << " " << std::get<3>(c0);
std::cout << std::endl;
return (0);
}
結(jié)果:
0 1 2 3
1 3
4.swap函數(shù)的用法
template
void swap(
array& left,
array& right);
交換兩個(gè)數(shù)組的值,示例
#include
#include
typedef std::array Myarray;
int main()
{
Myarray c0 = {0, 1, 2, 3};
// display contents " 0 1 2 3"
for (Myarray::const_iterator it = c0.begin();
it != c0.end(); ++it)
std::cout << " " << *it;
std::cout << std::endl;
Myarray c1 = {4, 5, 6, 7};
c0.swap(c1);
// display swapped contents " 4 5 6 7"
for (Myarray::const_iterator it = c0.begin();
it != c0.end(); ++it)
std::cout << " " << *it;
std::cout << std::endl;
swap(c0, c1);
// display swapped contents " 0 1 2 3"
for (Myarray::const_iterator it = c0.begin();
it != c0.end(); ++it)
std::cout << " " << *it;
std::cout << std::endl;
return (0);
}
結(jié)果:
0 1 2 3
4 5 6 7
0 1 2 3
???;??[?.