C++序列与关联容器

容器概述

在这里插入图片描述

#include <iostream>
#include <vector>

int main()
{
   std::vector<int> x{1,2,3};
   auto b = x.begin(); // auto b = x.rbegin() 反向遍历
   auto e = x.end(); //auto e = x.rend()
   for(auto ptr = b; ptr < e; ++ptr)
   {
       std::cout << *ptr <<" ";
   }

cbegin/cend: c表示const,构造只读的迭代器。

序列容器

在这里插入图片描述array
在这里插入图片描述

#include <iostream>
#include <array>
#include <type_traits>
int main()
{
    std::array<int, 3> a;
    std::cout << std::is_same_v<std::array<int, 3>::value_type, int>;
}
//输出1

在这里插入图片描述https://en.cppreference.com/w/cpp/container/array
在这里插入图片描述返回1,<int,3>非空返回0
在这里插入图片描述返回元素个数,3

vector
在这里插入图片描述在这里插入图片描述

#include <iostream>
#include <vector>

int main()
{
   std::vector<int> a{1,2,3};
   for (auto ptr = a.begin(); ptr != a.end(); ++ptr)
   {
      std::cout << *ptr << std::endl;
   }
}

输出
1
2
3

接口具体使用方法参考https://en.cppreference.com/w/cpp/container/vector

list
在这里插入图片描述deque、basic_string
在这里插入图片描述可参照:https://www.cnblogs.com/cthon/p/9181979.html

关联容器

在这里插入图片描述

#include <iostream>
#include <map>
using namespace std;

int main()
{
    map<char,int> m{{'a',3}}; 
	cout << m['a'] <<endl;//输出3
}

set
在这里插入图片描述set不能包含重复的元素;左子树和右子树层数最多相差一层
遍历时先遍历左子树-树根-右子树,即从小到大遍历输出

#include <iostream>
#include <set>

int main()
{
   std::set<int> s{1,2,3};// std::set<int, std::greater<int>> s{1,2,3}; 运行后将从大到小排列
   for (auto ptr = s.begin(); ptr != s.end(); ++ptr)
   {
      std::cout << *ptr << std::endl;
   }
   //std::cout << s.contains(3) << std::endl;数组里包含3,返回1
}
//输出2 3 57 100

map
在这里插入图片描述在这里插入图片描述输出:1 1 /3 1 /4 0

或者:
在这里插入图片描述map的插入删除

int main()
{
   std::map<int, bool> m;
   m.insert(std::pair<const int, bool>(3,true));//插入元素
   auto ptr = m.find(3);//查找元素
   std::cout << ptr->first << ' ' << ptr->second;
   std::cout << m[3] << std::endl;//输出1
   m.erase(3);//删除元素
}

在这里插入图片描述在这里插入图片描述

#include <iostream>
#include <set>
int main()
{
   std::set<int> s{1,3,1};//输出1 3
   //std::multiset<int> s{1,3,1}; 输出1 1 3 即允许重复键   
   for (auto i : s)
   {
      std::cout << i << std::endl;
   }
   std::cout << s.count(1) << std::endl;//输出1,若为multiset,则输出2   
}

在这里插入图片描述

#include <iostream>
#include <unordered_set>

int main()
{
   std::unordered_set<int> s{3, 1, 5, 4, 1};
   for (auto p : s)
   {
      std::cout << p << std::endl;
   }
}

输出 4 5 1 3,四个元素打印出来的顺序可能不同。

适配器与生成器

在这里插入图片描述在这里插入图片描述输出2 4。对容器v中每一个元素都调用isEven,判断为true则返回。

#include <iostream>
#include <ranges>

int main()
{
   for (int i : std::views::iota(1) | std::views::take(9))
       std::cout << i << ' ';   
}

输出:1 2 3 4 5 6 7 8 9

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值