你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

C++——标准库

[复制链接]
gaosmile 发布时间:2020-8-14 22:12
一、标准库“引子”:
1、操作符"<<"的原生意义是按位左移,例如:
1<<2
' t: p% e, K. Q- p& A
它的意义是将整数1按位左移2位,即:
0000 0001   演变成      0000 0100) G) e2 _0 \" u/ |6 C
重载左移操作符,将变量或者常量左移到一个对象中
代码示例:
#include <stdio.h>
" ~5 T2 q6 B2 D, p& |& S) ]. u9 V- |# q8 p/ b6 N. Y+ O% l1 Q
const char endl = '\n';$ v5 N" I0 y! \$ K
# b* ?' P7 m1 ?! J; {+ x4 t
class Console2 Z, r- X# S) Z; y# x
{3 a& g% m9 [. l
public:+ t* E0 J* I1 x7 d9 n6 H2 F
    Console& operator <<(int i)
! O- F5 l( M; y  C% e3 z    {
$ b$ A# {+ p4 A0 j        printf("%d\n",i);
) V: W; C* ]5 k) i" @        return *this;
+ ^7 E1 [  p  V7 O    }
, _, B5 a% e* i5 Y% ~1 {% O; P8 Q- m    Console& operator << (char c)
0 k3 b# D8 B5 D6 c2 h" N    {! I( b+ T: v6 L1 G& Q- j' Q3 z
       printf("%c\n",c);
& w' o3 x  I* e       return *this;1 H2 Y) l  i+ Y! W
    }: E% O* T/ H# f$ Q9 A& N- z0 ^3 ~
    Console& operator <<(const char* s)
( ^$ h/ \9 a3 P    {
' Y, i4 J! b5 A% w         printf("%s\n",s);
9 x& F4 e$ f2 d. ^         return *this;
  F3 E' g; J* z0 g    }
$ u! d6 |* u6 j    Console& operator << (double d)
. h2 h$ ]# W1 F* Y& i" E! F    {
: k: p( U3 V- E       printf("%f\n",d);/ L4 r9 V% g( r. q; _! j7 m
       return *this;
, E$ g0 J1 T0 w" c: F* z- v9 R4 V    }% F9 W8 f+ Y3 G% ?
};3 T/ O  Z. J5 H+ o) D" u* {0 n
4 x) A7 T/ D( m$ K
Console cout;
- L0 w6 m; d# T
3 v/ @! p( t9 M2 X0 Wint main(), z5 b. o4 s" @/ ^4 W$ a% K! P
{
0 ^' x) `6 z7 _+ G+ g/ x# L     cout<<1 << endl;
: i# z1 X6 O" f( D$ D+ m     cout<<"TXP"<<endl;
; Y! t. v- W$ F2 Q; [( m* C' K/ X( M" m7 E
     double a = 0.1;
$ O) @' D, d, Q     double b = 0.2;7 N( l8 z; u- l2 A; F" n% {
( \" I, }; M  y4 A
     cout << a + b <<endl;( d3 K. d" J& W, |, G0 u" c+ h
7 @- k0 d, @9 S" {: ^& S
     return 0;
3 C& ]- |# p( l9 ~. I' O, ]% q0 P}
% `7 B6 h9 o3 d9 f8 x! \+ Y& b  N
) Q, J/ R, s7 s  p# s9 ?5 J

: a8 O; P2 _# R& N3 u' C
运行结果:
root@txp-virtual-machine:/home/txp# ./a.out, y! w0 @3 d: B6 C/ t1 O
16 K; `* e  m; K8 e6 g, z
: _$ ]6 w6 F, t
7 B% A2 g& A& I0 j: Q5 R4 W
TXP
: ?# \+ ~0 s7 `4 e" o8 M
$ d4 I4 W2 K5 i" w, q" c: G
* Q2 k1 ?) b5 n1 u/ b0.300000
5 E; n$ k8 F" {/ @+ a+ G% l2 y+ G. V7 d- h! U& K" D8 W
  q' ~+ |1 U, L' i6 h
从上面我们可以看到,不直接使用printf函数去打印这个值,这个以前在书上,都是直接讲解把数值说送到输出流中去,但是你一开始学习cout函数(或者说你还没有接触到对象的时候,根本不明白这什么意思);如果进行了左移的重载之后,那么程序将产生神奇的变化,所以在 main() 中不用 printf() 和格式化字符串 '\n' 了,因为编译器会通过重载的机制会为我们选择究竟使用哪一个重载机制。
二、c++标准库:
1、标准库的特性:
  • C++标准库并不是C++语言的一部分
  • C++标准库是由类库和函数库组成的集合
  • C++标准库中定义的类和对象都位于std命名空间中
  • C++标准库的头文件都不带.h后缀,当然也兼容c语言里面的.h写法
  • C++标准库涵盖了C库的功能

    2 W" X5 L0 X' p( n6 y7 h
2、C++编译环境的组成:
微信图片_20200814221209.png
3、C++标准库预定义了很多常用的数据结构:
-<bitset>        -<set>          -<cstdio>
7 H7 e1 L+ P- O/ N% R0 J, h-<deque>         -<stack>        -<cstring>   
0 ~4 R8 T( D, i7 S- B-<list>          -<vector>       -<cstdlib>
4 c/ y+ a$ G& I2 {; T! ?-<queue>         -<map>          -<cmath>   
$ g- [* _! X  |3 l( j- ^4 T

  Q+ Q( w  W+ w# z5 W$ S
代码示例:
#include <cstdio>
- N& Q1 l+ }$ l7 Y8 p#include <cstring>; l4 p( p9 c) k+ O. h
#include <cstdlib>
3 E) c+ ~6 J" H: z5 d7 s/ R#include <cmath>4 k* u5 v' X; G% j7 V9 Z% N: e

5 V* X/ }3 R; s; N, _5 F( M. I% uusing namespace std;//所谓命名空间,是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙
) h0 q$ t& S) e' Y5 ]: V+ S: K; V/ t$ C6 _* F

4 Z# d/ r( T3 |: I2 T  M/ ^int main()
+ |/ j, c; l) l( P; e' j  x8 r{3 q8 Y; ?4 t7 t7 s
    printf("Hello world!\n");
, t1 D& Q) M5 m- X1 b# X
; r* u3 ]' |7 u; U5 D2 K3 D5 S    char* p = (char*)malloc(16);
2 n/ e* X+ b! U  O7 O, h9 I7 o/ _6 p
    strcpy(p, "TXP");
- d* K! g5 ]% ]9 e. x; Z2 ]  G
$ T* U" u! f# g# }# c! a4 w% q    double a = 3;
5 i/ u7 N2 n/ g; [5 J$ m: E    double b = 4;
, X* x, y1 Z8 T+ _    double c = sqrt(a * a + b * b);
- ]- e* [/ a. i3 G# [
, o; C5 Z5 H' r# h0 N' H* S8 C    printf("c = %f\n", c);( s$ R* W% {* V+ T/ l

  c2 Y9 ^3 \/ X/ s, ~$ r* O    free(p);" ~) [, a& Y1 d- W( o: Q, K
! q% H( V3 d4 K% x1 ?* N
    return 0;
: d$ a' G( m" p7 Q$ I7 }! S}
# ^! r- ~$ u& B1 }5 _0 n
! S$ }6 ?/ r; z2 e6 g7 [& ~: x
. p. u4 P9 M3 x2 `
输出结果:
root@txp-virtual-machine:/home/txp# ./a.out
6 X0 _) T% ]7 H3 e6 a" fHello world!
( Y: }2 `) f' u* ~8 oc = 5.000000
' N, `: b* }, B4 L% g6 N+ p8 [2 K
, X# s  @) Q9 n1 X
注:关于命名空间的介绍,这里没有详细的去介绍,后面会重新做一个详细介绍。
4、cout和cin两个函数形象比喻:
微信图片_20200814221213.png
代码示例:
#include <iostream>
5 K/ ?. Z2 P% e" T) y6 {, @1 Q1 e: z#include <cmath>7 s& O( n( z6 @5 k- ~% H( e

7 ^! T9 s$ A! r& a9 @5 M& ousing namespace std;9 Z1 C, ^7 D8 y' @& f& }; d/ l

& \' `! J3 r0 Z0 T2 P- a
& u: E3 |4 U. Y7 Kint main()
, e8 W" l- U& a3 B' h{- A7 @. j; x  L) l2 ^4 Z* \
    cout << "Hello world!" << endl;2 w! D: }& Z% y+ R: B. g% R
   
; u  _1 B5 M- |* [" }1 o; N    double a = 0;
3 a. g" y6 v! O, [6 C* L% u  h    double b = 0;
. K+ H9 h0 n; L) D0 w3 x) h   
" T0 H' m. _6 I( z    cout << "Input a: ";
$ v2 [' P/ N3 }0 w9 P6 J" @    cin >> a;
) }+ s5 _( Y3 d+ \! I7 k6 Z9 z      U; \( [% o  `: H3 ]
    cout << "Input b: ";( P) E& n  G0 I- c" C- {
    cin >> b;
$ {- X) h) \, ]2 [0 X+ e. o, z   
5 v% M! R$ m4 d' U* }( y6 f    double c = sqrt(a * a + b * b);
( t/ p" y  g  F9 T$ x  t  e% ?$ T" D1 O6 m   
* @8 }8 V4 F8 X( R) E/ I8 r    cout << "c = " << c << endl;/ e, @( ~/ _3 G1 j1 ]3 ~
    ; ?4 Z6 t8 u2 I; q
    return 0;
& c8 j. L: I% R; A# F9 Y9 H}. X- D( M& F( `) \

3 x* q" ?/ ^' j8 }. t! C. `' a2 e) f
结果输出:
root@txp-virtual-machine:/home/txp# ./a.out& s  Q! D2 f5 X  w' c
Hello world!
& Z3 m( H& E, T  P+ A& vInput a: 38 T4 a) Q3 D* l9 L
Input b: 58 L  B- a% |2 d2 X2 s2 q1 z+ C) G: v
c = 5.830958 K/ w7 H6 A: I

, W& _( d9 H6 T7 s; D9 K5 f; g. i2 A
当然这里关于cout和cin两个函数里面的细节也没有写明;不过如果接触过C++的朋友,现在看起来,现在这种写法,更加c++正统一点,之前的写法都是c写法,除了类的写法之外。
三、总结:
  • C++标准库是由类库和函数库组成的集合
  • C++标准库包含经典算法和数据结构的实现
  • C++标准库涵盖了C库的功能
  • C++标准库位于std命名空间中
    / `% B1 o: _* x2 `6 U
本期的内容对于接触过C++的朋友来说,非常简单。好了,今天的分享就到这里,如果文章中有错误或者不理解的地方,可以交流互动,一起进步。
赞 收藏 评论0 发布时间:2020-8-14 22:12

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版