前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++编程和STL

C++编程和STL

作者头像
鲸落c
发布2022-11-30 15:43:13
5820
发布2022-11-30 15:43:13
举报
文章被收录于专栏:鲸落学习笔记鲸落学习笔记

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

C++广泛用于竞争性编程。由于其可靠性、高效执行、短片段等,它是首选。它已被大多数编码人员适应,因为它还提供了标准模板库(STL)的好处。

C++ STL是编程的支柱。内置函数有时会将代码片段减少到一行。因此,以下是有关C++标准模板库(STL)的一些有趣事实:

1) 值可以通过一对{} 分配给容器。

代码语言:javascript
复制
// 按对分配值的各种方法

// 方法1
pair<int, int> p = make_pair(3, 4);

// 方法2
pair<int, int> p = { 3, 4 };

// 方法3
pair<int, <char, int> > p = { 3, { 'a', 10 } };

2) 正如我们熟悉的这对,还有一种称为 元组 的东西。

代码语言:javascript
复制
// 元组可以包含不同类型的元素
tuple t = {3, 4, 5, 'a'};

3) 我们可以避免写入所有头文件,例如iostream,vector,string,math等。只包含一个头文件就可以完成了这项工作!

头文件是 <bits/stdc++.h>。

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;

4) 你不需要为 GCD 函数编写欧几里得算法,相反,我们可以使用 __gcd(值 1, 值 2)。此函数返回两个数字的最大公约数。

代码语言:javascript
复制
Example: __gcd(18, 45) = 9
代码语言:javascript
复制
// 演示GCD功能的CPP程序

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int r = __gcd(10, 15);
    cout << r;

    return 0;
}

输出

代码语言:javascript
复制
5

注意: 这仅适用于 GCC。

5) 在C++中,您可以使用“to_string();” 命令直接将整数转换为字符串。

代码语言:javascript
复制
// CPP程序演示to_string()函数的功能

#include <bits/stdc++.h>
using namespace std;

// 驱动程序代码
int main()
{
    int a = 97;
    string t = to_string(a);
    cout << t;
}

输出

代码语言:javascript
复制
97

6) 在C++中,您可以使用 'stoi();  命令直接将字符串转换为整数。

代码语言:javascript
复制
// CPP程序演示stoi()函数的功能

#include <bits/stdc++.h>
using namespace std;

int main()
{
    string a = "2665";
    int t = stoi(a);
    cout<<t;
}

输出

代码语言:javascript
复制
2665

(七) 默认情况下,集合按升序存储元素。

代码语言:javascript
复制
set<datatype> setname;

注意: set<datatype, greater> setname;用于按降序存储集合中的值。

8) 在函数外部声明的每个变量都是静态的,默认值为 0。

代码语言:javascript
复制
// CPP程序,用于演示函数外声明的变量是静态的,默认值为0

#include <bits/stdc++.h>
using namespace std;

int a[5];
int main()
{
    // []中的值为0
    for (int i = 0; i < 5; i++)
        cout << a[i] << " ";

    // b[]中的值是垃圾
    cout << endl;
    int b[5];
    for (int i = 0; i < 5; i++)
        cout << b[i] << " ";

    return 0;
}

输出

代码语言:javascript
复制
0 0 0 0 0 
4196880 0 4196368 0 846571392 

9) 如果你在函数中声明一个数组,它的元素值是垃圾,但要将所有元素的值设置为零,我们可以使用,

代码语言:javascript
复制
 TYPE a[n] = { };
代码语言:javascript
复制
// CPP程序,用于将函数中数组的所有元素的值设置为零
#include <bits/stdc++.h>
using namespace std;

int main()
{
    // []中的值为0
    int a[5] = {};
    for (int i = 0; i < 5; i++)
        cout << a[i] << " ";

    // b[]中的值是垃圾
    cout << endl;
    int b[5];
    for (int i = 0; i < 5; i++)
        cout << b[i] << " ";

    return 0;
}

输出

代码语言:javascript
复制
0 0 0 0 0 
4196896 0 4196368 0 -345132736 

10) 数字 x 的二进制表示中的设置位数可以通过 __builtin_popcountll(x)  找到。基本上,此函数计算整数中的 one(设置位)的数量。

代码语言:javascript
复制
// CPP程序演示__builtin_popcountll(x)的功能

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int x = 5; // 0101
    cout << __builtin_popcountll(x);

    return 0;
}

输出

代码语言:javascript
复制
2

注意: 这仅适用于 GCC。

11) Memset 设置内存块的字节值(或无符号字符)。我们可以使用 memset 将整数数组的所有元素初始化为 0 或 -1,但不能初始化其他值。

初始化数组中除 0 或 -1 以外的所有元素不会根据需要设置所有元素,因为 memset 设置字节值,例如,调用 memset(arr, 1, 4) 来设置数组 int arr[4] 的所有元素。它变得0x01 0x01 0x01 0x01。(即 16,843,009,具体取决于您的 CPU 架构)但你的期望值是0x00 0x00 0x00 0x01。

代码语言:javascript
复制
// CPP程序演示memset将整数数组的所有元素初始化为0或-1

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a[5];

    // A的所有元素都是零
    memset(a, 0, sizeof(a));
    for (int i = 0; i < 5; i++)
        cout << a[i] << " ";
    cout << endl;

    // A的所有元素都是-1
    memset(a, -1, sizeof(a));
    for (int i = 0; i < 5; i++)
        cout << a[i] << " ";
    cout << endl;

    // 不起作用
    memset(a, 5, sizeof(a));
    for (int i = 0; i < 5; i++)
        cout << a[i] << " ";
}

输出

代码语言:javascript
复制
0 0 0 0 0 
-1 -1 -1 -1 -1 
84215045 84215045 84215045 84215045 84215045 

如果大家发现什么不正确的地方,或者你想分享有关上述的更多内容,可以在下面评论。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档