C++11 容器Array
与普通数组声明存储空间大小[]的方式是一样有效的,只是加入了一些成员函数和全局函数[get (array)、operators (array)],以便当作标准容器使用
零大小的array是有效的,但是不可以被成员函数front、back、data间接引用
array的swap是一个线性操作交换所有的元素,通常是非常低效的
Constructor:
.template < class T, size_t N > class array; 举例:
array<int,10> iArray={1,2,3,4,5,6,7,8,9,10};
Iterators
| 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 |
std::array<int,> arr = { , , , , };
std::cout << "arr contains:";
for ( auto it = arr.cbegin(); it != arr.cend(); ++it )
{
*it = 34; //error can't modify *it
arr.begin(); //point to array first element
arr.front(); //return the first element
arr.back(); //return the end element
std::cout << *it << std::endl;
}
Capacity
| empty | Test whether list is empty |
| size | Return size |
| max_size | Return maximum size |
Element access
| operator[] | Access element |
| at | Access element |
| front | Access first element |
| back | Access last element |
| data | Get pointer to first data |
注意:使用at程序崩溃时不会显示堆栈信息,尽量使用[]去array的值
back
data//返回指向array中第一个元素的指针
const char* cstr = "Test string";
std::array<char,> charray;
std::memcpy (charray.data(),cstr,);
std::cout << charray.data() << std::endl;//如果是char类型则打印值 Test string
//如果array中保存的是int
cout << iArray.data() << endl;//两者等效,等于打印出第一个元素的地址
cout << &charray << endl; array<string,> sArray={"hello","c++","I"};
for (auto it = sArray.cbegin(); it != sArray.cend(); ++it)
{
cout << *it << '\t';//打印出hello c++ I
}
cout << sArray.data() << endl;//打印地址
Modifiers
| fill | Fill array with value |
| swap | Swap content |
fill
std::array<int, > arr;
arr.fill();
for (auto it = arr.begin(); it != arr.end(); it++)
{
std::cout << " " << *it;
} arr.assign();
for (auto it = arr.begin(); it != arr.end(); it++)
{
std::cout << " " << *it;
}
OutPut:
34 34 34 34 34 5 5 5 5 5
swap
Global functions
| get(array) | Get element (tuple interface) (function template ) |
| operators (array) | Global relational operator functions for array |
get(array)//Returns a reference to the Ith element of array arr.
函数原型:
.template <size_t I, class T, size_t N> T& get ( array<T,N>& arr ) noexcept;
.template <size_t I, class T, size_t N> T&& get ( array<T,N>&& arr ) noexcept;
.template <size_t I, class T, size_t N> const T& get ( const array<T,N>& arr ) noexcept;
Output:
first element in myarray: 30
first element in mytuple: 10
operators(array)
模板原型如下: .template <class T, size_T N>
bool operator== ( const array<T,N>& lhs, const array<T,N>& rhs );
.template <class T, size_T N>
bool operator!= ( const array<T,N>& lhs, const array<T,N>& rhs );
.template <class T, size_T N>
bool operator< ( const array<T,N>& lhs, const array<T,N>& rhs );
4template <class T, size_T N>
bool operator> ( const array<T,N>& lhs, const array<T,N>& rhs );
.template <class T, size_T N>
bool operator<= ( const array<T,N>& lhs, const array<T,N>& rhs );
.template <class T, size_T N>
bool operator>= ( const array<T,N>& lhs, const array<T,N>& rhs );
std::array<int,> a = {, , , , };
std::array<int,> b = {, , , , };
std::array<int,> c = {, , , , };
if (a==b) std::cout << "a and b are equal\n";
if (b!=c) std::cout << "b and c are not equal\n";
if (b<c) std::cout << "b is less than c\n";
if (c>b) std::cout << "c is greater than b\n";
if (a<=b) std::cout << "a is less than or equal to b\n";
if (a>=b) std::cout << "a is greater than or equal to b\n";
Output:
a and b are equal
b and c are not equal
b is less than c
c is greater than b
a is less than or equal to b
a is greater than or equal to b
C++11 容器Array的更多相关文章
- STL - 容器 - Array
Array是C++ 11给STL新增加的容器 ArrayTest.cpp #include <array> #include <algorithm> #include < ...
- stout代码分析之九:c++11容器新特性
stout大量使用了c++11的一些新特性,使用这些特性有利于简化我们的代码,增加代码可读性.以下将对一些容器的新特性做一个总结.主要两方面: 容器的初始化,c++11中再也不用手动insert或者p ...
- 序列式容器————array
目录 介绍 1 构造函数 2 fill() 3 元素的获取 4 size() 5 empty() 6 front() 7 back() 8 get<n> 9 迭代器(待补充) 10 元素的 ...
- centos7下安装docker(11容器操作总结)
这段时间主要是学习了对容器的操作,包括:容器的状态:start,stop,restart,rename,pause,unpause,rm,attach,exec,kill,logs:还学习了对容器的资 ...
- 【校招面试 之 C/C++】第33题 C++ 11新特性(四)之STL容器
C++ 11新增array.forward_list(单链表).unordered_set.unordered_map集中容器.
- c++11——改进容器性能
使用emplace_back就地构造 emplace_back能就地通过参数构造对象,不需要拷贝或者移动内存,相比push_back能更好的避免内存的拷贝和移动,使得容器插入元素的性能得到进一步提升. ...
- C++ 顺序容器基础知识总结
0.前言 本文简单地总结了STL的顺序容器的知识点.文中并不涉及具体的实现技巧,对于细节的东西也没有提及.一来不同的标准库有着不同的实现,二来关于具体实现<STL源码剖析>已经展示得全面细 ...
- C++11在时空性能方面的改进
C++11在时空性能方面的改进 这篇我们聊聊C++11在时间和空间上的改进点: 主要包括以下方面: 新增的高效容器:array.forward_list以及unordered containers: ...
- c++11新特性(了解)
从C++出来到现在已经13年了. Bjarne Stroustrup(C++的创造者)最近评价C++:”感觉像个新的语言“. 事实上,C++11核心已经发生了很重大的变化: . 支持Lambda表达式 ...
随机推荐
- vue diff算法 patch
1.diff比较算法 图示: diff比较只会在同层级进行, 不会跨层级比较. 所以diff是:广度优先算法. 时间复杂度:O(n) 代码示例: <!-- 之前 --> <div&g ...
- 原创Oracle数据泵导出/导入(expdp/impdp)
//创建目录 create Or Replace directory dpdata1 as 'd:\test\dump'; //赋予读写权限 grant read,write on directory ...
- Linux下设置和查看环境变量(转)
Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1 永久的:需要修改配置文件,变量永久生效. 2 临时的:使用export命令声明即可,变量在关闭shell时失效. 设置变量 ...
- HighCharts/Highstock使用小结,使用汉化及中文帮助文档
此文档是本人在开发过程图形报表时使用HighCharts所遇到的问题及解决方案 .最后附上有HighCharts中文帮助文档 HighCharts 版本:Highcharts-3.0.1 Hi ...
- HDFS架构设计
原文:http://hadoop.apache.org/docs/r2.6.4/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html 介绍 HDFS是个分布式 ...
- TP3.2实例化复杂模型类
1.表名:xxf_witkey_member_oauth M方法,直接实例化对象:M('member_oauth','xxf_witkey_'[,'db_config']); 具体解析:M方法三个参数 ...
- tomcat部署war包访问显示404
在eclipse导出的maven项目war包,放到tomcat下启动,顺利启动且无报错,但是浏览器访问该项目时显示404 原因:未在server.xml中配置这几个项目,导致服务器查找不到 解决方法: ...
- 学习JUnit
一.为什么测试很重要? 塑造系统的设计.我们知道输入和输出应该是什么样的,但是我们需要创建什么对象来做到这一点呢?代码应该塑造成什么样的"形状"?编写测试可以让我们知道应该创建什么 ...
- iOS高级教程:处理1000张图片的内存优化
一.项目需求 在实际项目中,用户在上传图片时,有时会一次性上传大量的图片.在上传图片前,我们要进行一系列操作,比如:旋转图片为正确方向,压缩图片等,这些操作需要将图片加载到内存中,下面对内存的使用做详 ...
- iOS - CFNetwork 的使用
1.CFNetwork CFNetwork 是基于 OS 层 BSDSocket 封装(纯 C),用于网络通信,早期的网络请求框架 ASIHTTPRequest 就是基于 CFNetwork 进行的封 ...