(C++)STL之面向对象实验:小红花(运用bitset)

简介: (C++)STL之面向对象实验:小红花(运用bitset)

微信图片_20230701145359.png相关知识点运用:

微信图片_20230701145419.png


如下图所示,为学生的出勤情况(从左至右,每一列表示一个学生,1~25号)

微信图片_20230701145432.png


下图是学生出勤情况表数据 (可直接复制到student.txt文件中)

1111111111111111111111111

1110111011101110111011100

1101101101101101101101101

1111011110111101111011110

0011101110111101111101111

0011101111011111110111111

1111101111110111111100111

1100111110001111111111110

1111111111111101111111111

1111011111011111111110111

1

2

3

4

5

6

7

8

9

10

代码实现

#include

#include

#include

#include

#include

#include

#define N 25

using namespace std;


class Student

{

public:

int id;

int attend;


Student(int id,int attend) :id(id), attend(attend) {}


friend ostream& operator << (ostream& os, const Student& s)

{

 os << s.id << '\t' << s.attend << endl;

 return os;

}

};


class Sort

{

public :

vector& student;

Sort(vector& student) :student(student){}

bool operator() (Student a,Student b){

 return a.attend < b.attend;

}

};


void count()

{

vector stu;      


vector > bit;      


string str;


for (int i = 1; i < N + 1; i++)

{

 Student s(i, 0);

 stu.push_back(s);

}


ifstream in("student.txt");  //读

if (!in)

{

 cout << " open failed" << endl;

 return;

}


while (getline(in, str))

{

 bitsetb(str);

 bit.push_back(b);

}

for (int i = 0; i < bit.size(); i++)

{

 for (int j = 0; j < stu.size(); j++)

 {

  if (bit[i].test(j) == 1)

  {

   stu[j].attend++;

  }


 }

}


cout<< '\t' << "id" << '\t' << "attend" << endl;

sort(stu.begin(), stu.end(),Sort(stu));

cout << "\t";

copy(stu.begin(), stu.end(), ostream_iterator(cout, "\t"));


for (int i = stu.size()-1; i > stu.size() - 4; i--)

{

 cout << stu.at(i).id <<" ";

}

cout << "三名同学获得小红花" << endl;

}


int main()

{

count();

system("pause");

return 0;

}



运行结果截图

微信图片_20230701145448.png

相关文章
|
5天前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
22 7
|
23天前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
48 4
|
24天前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
50 5
|
24天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
38 2
|
26天前
|
存储 缓存 算法
【C++】BitSet和Bloom_Filter
位图(Bitmap)和布隆过滤器(Bloom Filter)是两种高效的数据结构。位图使用每一位二进制数表示数据项的存在状态,适用于精确判断元素存在性,广泛应用于图形图像处理、数据压缩、数据库索引等领域。布隆过滤器通过多个哈希函数将元素映射到位数组,用于快速判断元素是否可能属于集合,特别适合处理大规模数据,尽管存在误判率,但在网页缓存、网络数据包过滤等场景中表现出色。两者在空间效率、查询速度及误判率方面各有优势,适用于不同的应用场景。
32 4
|
29天前
|
存储 算法 Linux
【c++】STL简介
本文介绍了C++标准模板库(STL)的基本概念、组成部分及学习方法,强调了STL在提高编程效率和代码复用性方面的重要性。文章详细解析了STL的六大组件:容器、算法、迭代器、仿函数、配接器和空间配置器,并提出了学习STL的三个层次,旨在帮助读者深入理解和掌握STL。
47 0
|
8天前
|
存储 编译器 C语言
【c++丨STL】vector模拟实现
本文深入探讨了 `vector` 的底层实现原理,并尝试模拟实现其结构及常用接口。首先介绍了 `vector` 的底层是动态顺序表,使用三个迭代器(指针)来维护数组,分别为 `start`、`finish` 和 `end_of_storage`。接着详细讲解了如何实现 `vector` 的各种构造函数、析构函数、容量接口、迭代器接口、插入和删除操作等。最后提供了完整的模拟实现代码,帮助读者更好地理解和掌握 `vector` 的实现细节。
18 0
|
2月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
79 5
|
2月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
70 1
|
2月前
|
算法 安全 Linux
【C++STL简介】——我与C++的不解之缘(八)
【C++STL简介】——我与C++的不解之缘(八)