C++11新特性之 std::array container
来源:互联网 发布:js input 自动填充 编辑:程序博客网 时间:2024/06/06 08:58
数组每个人都很熟悉,vector更是我们常常用到的。
但是某些场合,使用vector是多余的,尤其能明确元素个数的情况下,这样我们就付出了效率稍低的代价!
但是你使用数组的代价是那么的不安全,那么的不方便。
于是,C++11推出了模板类array,位于std名称控件中。
与vector不同的是,array对象的长度是固定的,使用了静态存储区,即存储在栈上,效率跟数组相同,但是更加的安全。
首先需要包含头文件array,而且语法与vector也有所不同:
#include<array>...std::array<int,5> ai;//创建一个有5个int成员的对象std::array<double,4> ad = {1.2, 2.1, 3.1, 4.1};
顺便提一嘴,C++11允许使用初始化列表对vetcor和array进行赋值,详情请见博客《 c++11特性之initializer_list》
个人觉得array相比于数组最大的优势就是可以将一个array对象赋值给另一个array对象:
std::array<double, 4> ad = {1.2, 2.1, 3.1, 4.1};std::array<double, 4> ad1;ad1 = ad;
数组索引越界也是我们往往躲不过的坑儿,array和vector使用中括号索引时也不会检查索引值的正确性。
但是,他们有一个成员函数可以替代中括号进行索引,这样越界就会进行检查:
std::array<double, 4> ad = {1.2, 2.1, 3.1, 4.1};ad[-2] = 0.5;//合法ad.at(1) = 1.1;
使用at(),将在运行期间捕获非法索引的,默认将程序中断。
最后上一段代码:
#include <string>#include <iterator>#include <iostream>#include <algorithm>#include <array>int main(){ // construction uses aggregate initialization std::array<int, 5> i_array1{ {3, 4, 5, 1, 2} }; // double-braces required std::array<int, 5> i_array2 = {1, 2, 3, 4, 5}; // except after = std::array<std::string, 2> string_array = { {std::string("a"), "b"} }; std::cout << "Initial i_array1 : "; for(auto i: i_array1) std::cout << i << ' '; // container operations are supported std::sort(i_array1.begin(), i_array1.end()); std::cout << "\nsored i_array1 : "; for(auto i: i_array1) std::cout << i << ' '; std::cout << "\nInitial i_array2 : "; for(auto i: i_array2) std::cout << i << ' '; std::cout << "\nreversed i_array2 : "; std::reverse_copy(i_array2.begin(), i_array2.end(), std::ostream_iterator<int>(std::cout, " ")); // ranged for loop is supported std::cout << "\nstring_array : "; for(auto& s: string_array) std::cout << s << ' '; return 0;}
2 0
- C++11新特性之 std::array container
- C++11新特性之std::function
- C++11新特性之std::function
- C++11新特性之std::bind与std::function
- C++11新特性之 std::future and std::async
- C++11新特性之std::function & std::bind
- C++11新特性之 std::future and std::async
- 【C/C++】C++11新特性:std::bind
- C++11新特性之 std::forward(完美转发)
- C++11新特性之 std::forward(完美转发)
- C+11 新特性
- C++11新特性应用--占位符(std::placeholders std::is_placeholder std::is_bind_expression)
- C++11新特性应用--占位符(std::placeholders std::is_placeholder std::is_bind_expression)
- C++11新特性应用--占位符(std::placeholders std::is_placeholder std::is_bind_expression)
- c++11特性之std::thread--初识
- c++11特性之std::thread--进阶
- 【C++11】新特性——std::function
- Swift4.0新特性之String、Array和Dictionary
- LintCode-矩阵的之字型遍历
- 【软工】软工文档总结
- The Antivirus Hacker's Handbook 读书笔记
- 【菜鸟学Java】3:封装一个分页类PageBean
- viewpager实现自动滑动以及手势滑动功能
- C++11新特性之 std::array container
- NSNotificationCenter用法总结
- SQL基础学习8
- Java基础知识
- JavaScript垃圾收集
- Python爬虫入门
- 隐式图--HDU - 2717 Catch That Cow
- HTTP集群之nginx+keepalived
- android获取string.xml的值