STL容器之initializer_list与set

简介: STL容器之initializer_list与set

initializer_list

initializer_list创建的对象,初始值可以有很多个,像vector 一样

想多少个,就多少个。

include<iostream>
#include<initializer_list>
using namespace std;
int main()
{ 
  initializer_list<int> date = { 1, 2, 3, 9 }; //列表  想写多少就写多少
  system("pause");
  return 0;
}
## 案例一:vector动态数组的简单模拟

可以用作函数的参数(可以传一个,二个,想传多少个就多少个)

同时,注意,这里是常链表,用cons修饰

这里使用了委托构造

#include<iostream>
#include<initializer_list>
using namespace std;
template <class T>
class m_vector
{
public:
  m_vector(int cursize) : cursize(0)
  {
    men = new T[cursize];
  }
  m_vector( const initializer_list<T>& object): m_vector(object.size())//委托构造,初始化
  {
    for (auto& v : object)
    {
      men[cursize++] = v;
    }
  }
  void printDate()
  {
    for (int i = 0; i < cursize; i++)
    {
      cout << men[i];
    }
  }
private:
  T* men;
  int cursize;
};
int main()
{
  m_vector <int> mm = { 1, 6, 8 }; //常数列表用const修饰
  mm.printDate();
  system("pause");
  return 0;
}

案例二(实现n个数的加法)

#include<iostream>
#include<initializer_list>
using namespace std;
int add(initializer_list<int> date)
{
  int cout = 0;
  for (auto& v : date)
  {
    cout += v;
  }
  return cout;
}
int main()
{
  //利用initializer_list 可以求任意数之和
  cout << add({ 1, 3, 4 }) << endl;;
  cout << add({ 2, 4, 8, 9, 0, 9, 8, 6 });
  system("pause");
  return 0;
}

set

set也叫做集合的意思,有以下2个特性

1.有序性:默认的排序是从小到大进行排列

2.唯一性:相同值只保留一个、

单集合

有序性

#include<iostream>
#include<set>
using namespace std;
int main()
{
  set<int> date = { 1, 3, 0 ,8, 6, 4 };  //set容器自动排序 从小到大
  for (auto& v : date)
  {
    cout << v;
  }
  system("pasue");
  return 0;
}

唯一性

#include<iostream>
#include<set>
using namespace std;
int main()
{
  set<int> date = { 9, 9, 7, 8, 0, 6 };
  date.insert(2); //insert()插入函数,插入一个2;
  for (auto& v : date)
  {
    cout << v;
  }
  system("pause");
  return 0;
}

删除元素

#include<iostream>
#include<set>
using namespace std;
int main()
{
  set<int> date = { 1, 8, 9, 6 };
  cout << date.size() << endl;
  date.erase(find(date.begin(), date.end(), 9)); //删除元素,erase(),通常结合find算法加迭代器
  for (auto& v : date)
  {
    cout << v;
  }
  system("pause");
  return 0;
}

多重集合

多重集合,只具有排序功能,不具有去重功能

#include<iostream>
#include<set>
using namespace std;
int main()
{
  multiset<int> date = { 1, 3, 4, 5, 6,5 };
  for (auto& v : date)
  {
    cout << v;
  }

less与greater

#include

#include

using namespace std;

int main()

{

set<int,less> date = { 1, 2, 4, 3, 9, 5, 6, 6 }; //less从小到大排列

for (auto& v : date)
{
  cout << v;
}
cout << endl;
set<int, greater<int>> date1 = { 0, 3, 4, 1, 2, 2 , 3 ,4 ,1 }; //greater 从大到小排列
for (auto& v : date1)
{
  cout << v;
}

}

自定义类型

set处理自定义类型

比较的方法,不推荐使用重载,使用仿函数

同样后面打印的话,使用新式for循环加接口函数较为方便,使用函数重载的话,重载就较为复杂

#include<iostream>
#include<set>
#include<string>
using namespace std;
class MM
{
public:
  MM(int age,string name): age(age), name(name) {}
  int getAge() const { return age;}
  string getName() const { return name; }
private:
  int age;
  string name;
};
class compareName
{
public:
  bool operator ()(const MM& object1, const MM& object2) const
  {
    return object1.getName() < object2.getName();
  }
};
int main()
{
  set<MM, compareName> date;
  date.insert(MM(10, "张三"));
  date.insert(MM(13, "李"));
  date.insert(MM(89, "nininninin"));
  for (auto& v : date)
  {
    cout << v.getAge() << " " << v.getName() << endl;;  
  }
  //此处用函数重载,较为麻烦,可以使用接口函数进行访问;
}


相关文章
|
22天前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
29天前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
24天前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
20天前
|
存储 Java 索引
|
20天前
|
测试技术 索引 Python
Python接口自动化测试框架(基础篇)-- 常用数据类型list&set()
本文介绍了Python中list和set两种数据类型的使用,包括它们的创建、取值、增删改查操作、排序以及内置函数的使用,还探讨了list的比较函数和set的快速去重功能。
14 0
|
27天前
|
安全 编译器 容器
C++STL容器和智能指针
C++STL容器和智能指针
|
2月前
|
消息中间件 JSON NoSQL
Redis深度解析:核心数据类型之hash、list、set
Redis深度解析:核心数据类型之hash、list、set
|
2月前
|
存储 算法 C++
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
45 0
|
2月前
|
存储 语音技术 Python
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
|
2月前
|
存储 算法 程序员
C++基础知识(八:STL标准库(Vectors和list))
C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等. STL容器的提供是为了让开发者可以更高效率的去开发,同时我们应该也需要知道他们的底层实现,这样在出现错误的时候我们才知道一些原因,才可以更好的去解决问题。