分享是一种神奇的东西,它使快乐增大,它使悲伤减小。
avatar
XMO

qianmowanjidebi.jpg

头文件<map>

map是STL的一个关联容器,翻译为映射,数字也是一种映射。如int

a[10]是int到int的映射,而a[5] = 25,是把5映射到25。


map映射容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间有一一映照关系。


map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来


键值映照数据
Exam: NameScore
Jack98.5
Bomi96.0
Kate97.5

map映照容器元素的数据构成示意图


普通int数组是map<int,int>a;

字母到整型的映射是map<char,int>a;

字符串到整型的映射是map<string,int>a;


作用map<int,string>   m;常用函数功能备注
查询m.at[3]或m[3]返回一个引用,指向键位3时的对应值;如果元素不存在,map会自动建立这个元素注意,它和数组下标完全不是一回事



avatar
XMO

qianmowanjidebi.jpg

queue是队列的容器,需要头文件<queue>,并且必须要有"using namespace std;"

队列无法访问中间的元素,队列只能访问队首和队尾

queue<int>   q;常用函数功能
q.front(),q.back()将x入队
    front()返回队首元素;back()返回队尾元素
q.empty()判断queue是否为空,空为true,否则为false
q.size返回queue内元素个数
q.pop()队首元素出队

所有函数时间复杂度都为O(1)

注意:pop() 必须在队列不为空时使用,所以在使用之前一定先判断队列是否为空!!!!

avatar
XMO

qianmowanjidebi.jpg

[猛戳我查看Excel文件]


avatar
XMO

qianmowanjidebi.jpg

stack就是栈的容器,头文件<stack>,并且必须要有 using namespace std; ,但是stack只能访问栈顶

stack<int>   st;常用函数功能
st.push(x)将x入栈
st.top()获取栈顶元素
st.pop()弹出栈顶元素
st.empty()判断stack是否为空,空为true,否则为false
st.size()返回stack内元素个数


所有函数时间复杂度都为O(1)

注意:top()和pop()必须在栈不为空时使用,所以在使用之前一定要先判断栈是否为空 


avatar
XMO

qianmowanjidebi.jpg

vector实际就是动态数组,头文件<vector>,并且必须要有"

using namespace std;"这行代码。随机存取任何元素都能在常数时间完成。在尾部增删元素具有较好的性能。

尾端插入和删除元素,算法时间复杂度都为O(1);其他元素插入和删除为O(n)

作用vector<int>   v;常用函数功能备注
内存分配v.capacity()当前可容纳的vector元素个数使用之前应该分配好使用空间和内存
v.reserve(n)扩大容量为n
v.at(i)返回索引所标识的元素。对i进行越界检查
v[i]返回索引所标识的元素。和数组用法几乎完全相同,不检查
元素存取v.front()返回第一个元素,不检查第一个元素是否存在
v.back()返回最后一个元素,不检查最后一个元素是否存在


作用vector<int>   v;常用函数功能备注
插入元素v.insert(pos,e)在pos位置插入元素e的副本,并返回新元素位置这三种操作涉及大量元素的移动,可能会产生严重影响效果
v.insert(pos,n,e)在pos位置插入n个元素e的副本
v.insert(pos,begin,end)在pos位置插入区间(begin,end)内所有元素的副本
v.push_back(20)尾端插入新元素的副本
作用vector<int>   v;常用函数功能备注
移除元素v.erase(pos)删除pos位置的元素,返回下一个元素的位置由vector产生的迭代器持续有效,除非产生(1)插入元素;(2)容器变化引起内存重新分配
v.erase(begin,end)删除区间(begin,end)内所有元素,返回下一个元素的位置
v.pop_back()移除最后一个元素但不返回最后一个元素
v.clear()移除所有元素,清空容器
v.resize(num)将元素数量改为num(增加的元素用默认构造函数产生,多余的元素被删除)
v.resize(num,e)将元素数量改为num(增加的元素是e的副本)
v.empty()判断是否为空,空为true,否则为false

v.size()返回元素个数




avatar
XMO

#include<bits/stdc++.h>

using namespace std;

double calculatePi(int n){

    double pi = 0.0;

    for(int i=0;i<n;i++){

        pi+=4.0 * (1-(i%2)*2) / (2*i+1);

    }

    return pi;

int main(){

    int n;

    cout<<"迭代次数:"

    cin>>n;

    double approxPi = calculatePi(n);

    cout<< "使用" << n << "次迭代得到的π近似值为:" << approxPi << endl;


转载至  https://blog.csdn.net/lei967809/article/details/138395509

avatar
XMO

进入文章详情页以获得帮助

Go to the article details page for assistance

avatar
XMO

进入文章详情页以获得帮助

Go to the article details page for assistance

avatar
XMO

在现代社会中,教育的方式和方法一直在不断地发展和变化。其中,“告诉家长”这一做法,似乎成了大部分老师处理学生问题时的常用手段。这种做法虽然在某些情况下能够起到一定的效果,但同时也引发了一些争议和讨论。 


【老师告家长所带来的问题】

首先,我们必须承认,家长是孩子教育的第一责任人,他们对孩子的成长和行为有着不可推卸的责任。当孩子在学校出现问题时,老师与家长沟通是非常必要的,这有助于家长了解孩子在学校的表现,也有助于家长和老师共同找到解决问题的方法。 然而,如果“告诉家长”变成了一种频繁的手段,就会带来一些问题:


1.增大家长的压力:家长可能会因为频繁接到老师的“告状”而感到压力大,这不仅影响他们的工作,也可能让他们感到烦躁,从而将自己的情绪释放到孩子身上。

2.伤害孩子的自尊心:孩子可能会因为经常被“告状”而感到羞愧和自卑,这可能对他们的心理健康产生负面影响。 3. 影响师生和谐关系:频繁地“告诉家长”可能会让学生觉得老师不信任他们,这可能会影响师生之间的信任和关系。而且会有人怀疑老师的能力有问题。

3.妨碍教育的自主性:教育应该是一个引导和激励的过程,而不是简单的惩罚和控制。如果老师过于依赖“告诉家长”,可能会忽视了教育的真正目的。


【老师告家长的原因】


 1 因为现在老师没有能力或者不愿意处理学生的问题 更准确的说,不是没有能力,而是不愿意花费精力(心力)为什么不愿意花费心力?因为老师的诉求 不是 真正的去了解学生的矛盾根源,也不是从根本上解决学生之间的恩怨矛盾,而是能够“快速高效”让学习环境变得安静,更看重集体的利益。 


2 老师不敢管学生 老师怕学生家长投诉 家长为什么动不动就投诉老师呢?

假设老师怕家长举报老师管学生,那解决不了问题就解决产生问题的人以及计较问题的人,直接越过学生告诉家长或许效果反而更好


 3 因为老师可以快速高效地联系到家长,比如用微信

举个例子,现在有微信,很多时候在我以及我的同学还没回家之前我们的父母就已经知道成绩了,为什么?就是因为微信的便利性,能让老师更方便的联系父母


【那老师应该怎么做呢】

我认为,老师在处理问题的时候应该先自主思考,如果解决不了在告诉家长,不能一味的依赖告诉家长!(孩子犯错误 老师的做法)


 解决方案: 老师遇到学生问题了,可以先跟学生说,看看老师和学生之间能不能解决这个问题,如果学生和老师之间产生的矛盾已经大到一发不可收拾,不能解决了,再去告诉家长,让家长介入解决也不迟,如果学生的行为问题影响到其他学生或学校的正常运作,如重大违纪、欺凌同学等,老师应告知家长,并寻求家长的支持和合作来解决问题 。 (什么样的问题才需要告诉家长)


告诉学生家长的时候,要注意不要说对于学生来说影响家庭和睦或者对于学生来说很坏的话,会影响学生在家长严重形象的话。 (和家长沟通时 不要一味的指责甚至语言攻击学生,更不要破坏学生和家长之间的关系,而应该和家长合作,找到学生问题的根源以及解决方案)


教育是一个细致的工作,它需要老师、家长和孩子三方的共同努力。在这个过程中,我们应该寻求更加平衡和有效的方法,而不是简单地依赖某一种手段。通过理解和尊重孩子,以及与家长的合作,我们可以共同创造一个更加健康的教育环境。 


Tips:当你看到这条Tips的时候,你就一定在看这条Tips吧


avatar
XMO

qianmowanjidebi.jpg

鸽子的我又来更新了~

程序中的所有数在计算机内存中都是以二进制的形式储存的。

位运算就是直接对整数在内存中的二进制位进行操作

为什么用?因为他快啊!


运算符示例作用
& (与)a&ba和b的二进制中表示中,相同位的两个数字都为1,才能是1
| (或)a|b相同位只要一个为1即为1
︿ (异或)a︿b如果某位不同则该位为1,否则该位为0
~ (取反)~a0和1全部取反
<< (左移)a<<b就表示把a转为二进制后左移b位(在后面添b个0)
>> (右移)a>>b表示二进制右移b位(去掉末b位)


----------------------------------------------------------------------------------------------------------------------

第三级别(既有右结合性)
!    逻辑取反
not!的另一种表达
~按位取反

  

第五级别
乘法
/除法
%取余数(横运算)
第六级别
 +加法
 -减法
第七级别
<<位左移
>>位右移
第八级别
<小于
<=小于等于
>大于
>=大于等于
第九级别
 ==恒等于
 eq恒等于
 !=不等于
not_eq不等于
第十级别
&位且运算
bitand位且运算
第十一级别
︿位异或运算
xor位异或运算
第十二级别
|位或运算
bitor位或运算

--------------------------------------------------------------------------------------------------------------------------------

与应用

&运算:通常用于二进制取位操作

int A;
cin>>A;
if(a&1)
    cout<<"奇数";
else
    cout<<"偶数"

A&1的结果就是取A的二进制的最末位

--------------------------------------------------------------------------------------------------------------------------------

进制输入输出

头文件 :iomanip

dec:十进制

hex:十六进制

oct:八进制

%d:十进制

%x:十六进制

%o:八进制

//十六进制
int a;
a=0x0027;
cin>>hex>>a;
a=027;
cin>>oct>>a;
cin>>dec>>a;
cout>>oct>>a;
printf("%x",a);
printf("%o",a);

--------------------------------------------------------------------------------------------------------------------------------

#include<iostream>
#include<cstdio>
#include<climits>
using namespace std;
int main(){
    cout<<INT_MAX<<endl;
    cout<<hex<<TNT_MAX<<endl;
    cout<<dec<<TNT_MIN<<endl;
    cout<<hex<<TNT_MIN<<endl;
    int a=0xffffffff;
    cout<<dec<<a<<endl;
    return 0;
}
输出为:
2147483647
7fffffff
-2147483648
80000000
-1

--------------------------------------------------------------------------------------------------------------------------------

求反应用

int main(){
    int a=-7;
    int b=~a;
    cout<<b<<endl;
    a=7;
    b=~a;
    cout<<b<<endl;
    return 0;
}9
输出:
6 -8

对一个有符号的数进行求反运算后,最高位的变化将导致正负颠倒,并且数的绝对值会差1。也就是说,~a实际上等于-a-1。

--------------------------------------------------------------------------------------------------------------------------------

右移运动

a>>b就表示把a转为二进制后右移b位。正数高位补0,负数高位补1.

相当于a除以2的b次方(取整)。

我们也经常用>>1来代替除2操作。

--------------------------------------------------------------------------------------------------------------------------------

取某些位:

int a=0x29; //(101001)2
  1. 取末位:

    a&1

int main(){
    int a=109;
    cout<<(a&1);
    return 0;

 2.取末三位:

  a&(111)下标2

  a&(1000-1)下标2

  a&((1<<3)-1)

  3.取末k位:

  a&((1<<k)-1)

--------------------------------------------------------------------------------------------------------------------------------

 int a=0x29; //(101001)下标2

 4.取右数第三位:

  a>>2&1

 5.取右数第k位:

(a>>k-1)&1

给某些位赋值:(赋1)

int a=0x2A; //(101010)下标2

 1.最后一位变成一:

  a|1

 2.把右数第三位变成一:

  a|1<<2

--------------------------------------------------------------------------------------------------------------------------------

给某些位赋值:(赋0

int a=0x29; //(101001)下标2
  1. 最后一位变成0:

   (a|1)-1

   2.把右数的第四位变成零:

   a&~(1<<3)

   3.把右数第k位变成零

   a&~(1<<k-1)

--------------------------------------------------------------------------------------------------------------------------------

给某些位赋值:(求反)

int a=0x29; //(101001)下标2

  1、最后一位求反:

  a^1

  

  2、右数第3位求反:

  a^1<<2


  3、右数第k位求反:

  a^1<<k-1

--------------------------------------------------------------------------------------------------------------------------------

  1.如何O(1)的时间将一个数X的最低位的1去掉?

  例如:

  X=6 其二进制为:(110)下标2

  X去掉最低位的1为:(110)下标2

  x&(x-1)

  2.如何O(1)的时间只保留一个数X的最低位的1?

  例如:

  X=6 其二进制为:(110)下标2

  X只保留最低位1为:(10)下标2

  说明:

lowbit(x)=x&(~x+1)

--------------------------------------------------------------------------------------------------------------------------------

补码中:

~x+1=-x

lowbit(x)=x&-x


XM.O-内部文章-请勿转载-谢谢