STL标准库(二)序列容器之array

容器

容器的本质是类模板,分为序列容器和关联容器

序列容器

array 固定数组 应用包含arrry库

vector 动态数组 应用包含 vector库

deque 双端队列

list 双向链表

forward_list 单向链表

stack 栈

queue 队列

prority 优先队列

array应用

int main()

{

    std::array<int, 5> ObjArr = { 0,1,2,3,4 }; 声明一个int类型五个长度的固定数组,并初始化,等同于int arr[5],一普通数组,系统再加一些方法一些迭代器等等

    std::cout << ObjArr.size() << std::endl; 输出数组大小

    for (size_t i = 0; i < 5; i++) 遍历该数组

    {

       std::cout << ObjArr[i] << "\t";

    }

    std::cout << std::endl;

    std::array<int, 5> ObjArr2(ObjArr); 调用拷贝构造

    for (size_t i = 0; i < 5; i++)

    {

       std::cout << ObjArr2[i] << "\t"; 同被拷贝数组一致

    }

    std::cout << std::endl;

    ObjArr[4] = 120; 该数组可以同普通数组一样进行赋值

    for (size_t i = 0; i < 5; i++)

    {

       std::cout << ObjArr[i] << "\t";

    }

    std::cout << std::endl;

    ObjArr.at(3) = 12138; 修改第三个下标为12138

    for (size_t i = 0; i < 5; i++)

    {

       std::cout << ObjArr[i] << "\t";

    }

    std::cout << std::endl;

    std::cout << ObjArr.data() << "\t";

    std::cout << std::endl;

    int * p = ObjArr.data(); 获取数组真实地址,指向该数组内存首地址

    for (size_t i = 0; i < 5; i++) 遍历输出该数组

    {

       std::cout << *p++ << "\t";

    }

    std::cout << std::endl;

    std::cout << ObjArr.front() << std::endl; 获取数组首位置元素

    std::cout << ObjArr.back() << std::endl; 获取数组末位置元素

    if (ObjArr.empty()) 判断当前数组是否为空

    {

       std::cout << "Enpty" << std::endl;

    }

}

迭代器应用

template <typename T> 创建一个模板

void print(T Begin, T end) 遍历打印

{

    for (T i = Begin; i != end; ++i)

    {

       std::cout << *i << std::endl;

    }

    std::cout << std::endl;

}

int main()

{

    using ArrayIterator = std::array<int, 5>::iterator; 使用迭代器

    std::cout << typeid(ArrayIterator::iterator_category).name() << std::endl;获取该迭代器类型,是随机访问迭代器

    std::array<int, 5>::iterator begin = ObjArr.begin();

    std::array<int, 5>::iterator end = ObjArr.end();

    print<std::array<int, 5>::iterator>(begin, end); 打印遍历该迭代器

    std::array<int,  5>::iterator   tempvarA = ObjArr.begin() + 2; 打印第三个元素

    std::cout << *tempvarA << std::endl;

    tempvarA++; 地址++

    std::cout << *tempvarA << std::endl;

    tempvarA--; 地址--

    std::cout << *tempvarA << std::endl;

    tempvarA -= 2; 地址-2

    std::cout << *tempvarA << std::endl;

    std::cout << tempvarA[3] << std::endl; 打印下标3的元素

    *tempvarA = 555; 修改当前地址即首地址的值为5

    print<std::array<int, 5>::iterator>(begin, end);

    std::cout << "--------------------------------" << std::endl;

    std::cout << ObjArr.front() << std::endl; 输出第一个元素

    std::cout << "--------------------------------" << std::endl;

    std::cout << ObjArr.back()<< std::endl; 输出最后一个元素

    std::cout << *ObjArr.rbegin() << std::endl; 输出反向第一个元素

    print(ObjArr.rbegin(), ObjArr.rend());输出反向第一个和最后一个元素

    system("pause");

    return 0;

}

以下为该程序输出结果

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值