目录

  • 1、传引用
  • 2、vector使用
    • 初始化方法
    • 常用成员函数
  • 3、字符串string
    • 初始化方法
    • 常用成员函数
  • 4、哈希表 unordered_map
    • 初始化
    • 常用成员函数
    • 示例:计数器
  • 5、哈希集合 unordered_set
    • 初始化
    • 常用成员函数
  • 6、队列 queue
    • 初始化
    • 成员函数
  • 7、栈stack
    • 初始化
    • 常用成员函数
  • 7、emplace_back 与 push_back的区别
  • 8、vector 中“=”是深复制,拷贝构造也是深复制
  • 8、vector swap()、assign()用法

1、传引用

C++函数参数默认是传值的,如果使用数组之类的容器作为参数,一般会加上&符号表示传引用。
没有加&,就是传值,会涉及到数据复制。在递归函数中,每次递归都会复制一遍容器,非常耗时

2、vector使用

初始化方法

//初始化一个int型的空数组nums
vector<int> nums;//初始化一个大小为n的数组nums,数组中的值默认为0
vector<int> nums(n);//初始化一个元素为1、2、3的数组nums
vector<int> nums{1,3,5};
//初始化一个大小为n的数组nums,其值全都为2
vector<int> nums(n,2);//初始化一个二维int数组dp
vector<vector<int>> dp;//初始化一个大小为m * n的布尔数组dp
//值均为true
vector<vector<bool>> dp(m,vector<bool>(n,true));

常用成员函数

//返回数组是否为空
bool vector.empty()//返回元素个数
size_type vector.size()//返回数组中最后一个元素的引用
reference vector.back()//在数组尾部插入一个元素val
void vector.push_back(val);//删除数组尾部元素
void pop_back();

3、字符串string

初始化方法

//s是一个空字符串
string s;
//s是字符串"abc"
stirng s = "abc";

常用成员函数

//返回字符串长度
size_t s.size()//判断字符串是否为空
bool s.empty()//在字符串尾部插入一个字符
void s.push_back(char c);//删除字符串尾部字符
void pop_back()//返回从索引pos开始,长度为len的子字符串
string substr(size_t pos, size_t len)//判断两个字符串是否相等
bool s1 == s2

4、哈希表 unordered_map

初始化

//初始化一个key为int,value为int的哈希表
unordered_map<int,int> hash_map;//初始化一个key为string,value为int数组的哈希表
unordered_map<string,vector<int>> hash_map;

常用成员函数

//返回哈希表键值对个数
size_type hash_map.size();//返回哈希表是否为空
bool hash_map.empty();//返回哈希表中key出现的次数
//因为哈希表不会出现重复的键,所以该函数只可能返回0或1
//可以用来判断key是否存在与哈希表中
size_type hash_map.count(key);//通过key清除哈希表中的键值对
size_type hash_map.erase(key);

需要注意的点:对于unordered_map,使用方括号[]访问键key时,如果key不存在,则会自动创建key,对应的值为默认值。

示例:计数器

vector<int> nums{1,1,3,4,5,3,6};unordered_map<int,int> counter;
for(int num : nums)
{//可以通过[]直接访问或修改对应的键counter[num]++;
}
//遍历哈希表中的键值对
for(auto& it : counter)
{int key = it.first;int val = it.second;cout << key << ": " << val << endl;
}

上面的counter[num]++;实际对应了下面语句:

for(int num : nums)
{if(!counter.count(num)) counter[num] = 0;counter[num]++;
}

5、哈希集合 unordered_set

初始化


//初始化一个存储int的哈希集合
unordered_set<int> visited;//初始化一个存储string的哈希集合
unordered_set<string> visited;

常用成员函数

//返回哈希表的键值对个数
size_type unordered_set.size();//返回哈希表是否为空
bool unordered_set.empty();//类似哈希表,如果key存在则返回1,否则返回0
size_type unordered_set.count(key);//向集合中插入一个元素key
pair<iterator,bool> unordered_set.insert(key);//删除哈希集合中的元素key
//如果删除成功返回1,如果key不存在返回0
size_type unordered_set.erase(key);

6、队列 queue

初始化

//初始化一个存储int的队列
queue<int> q;//初始化一个存储string的队列
queue<string> q;

成员函数

//返回队列是否为空
bool q.empty();//返回队列中元素个数
size_type q.size();//将元素加入队尾
void q.push(val);//返回队头元素的引用
value_type& front();//删除队头元素
void pop();

需要注意的是,队列pop方法一般是void类型的,不会同时返回被删除的元素,所以,如果想用被删除的元素,得先取出来;

int e = q.front();
q.pop();

7、栈stack

初始化

//初始化一个存储int的堆栈
stack<int> stk;//初始化一个存储string的堆栈
stack<string> stk;

常用成员函数

//返回堆栈是否为空
bool stk.empty();//返回堆栈中元素的个数
size_type stk.size();//在栈顶添加元素
void stk.push(val);//返回栈顶元素的引用
value_type& stk.top();//删除栈顶元素
void stk.pop();

7、emplace_back 与 push_back的区别

摘自https://www.jianshu.com/p/adf58f9fad84
emplace_back和push_back都有往容器后面插入一个元素的作用
不同的是
emplace_back() 和 push_back() 的区别,就在于底层实现的机制不同。push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程

8、vector 中“=”是深复制,拷贝构造也是深复制

两个vector的地址并不相同:

int main()
{int w = 100;int h = 20;vector<int> dataA(w * h, 0Xff);vector<int> dataB = dataA; // copy 构造int* ptr0 = &dataA[0];int* ptr1 = &dataB[0];cout << ptr0 << endl;cout << ptr1 << endl;return 0;
}

8、vector swap()、assign()用法

利用swap()函数(交换两个vector)

vector<int> array{3, 5, 2, 6, 4};
vector<int> outArray{ 1,2,3 };
outArray.swap(array);//outArray={3,5,2,6,4};array={1,2,3}

利用assign()函数(清空并深复制)

vector<int> array{3, 5, 2, 6, 4};
vector<int> outArray{ 1,2,3 };
outArray.assign(array.begin(),array.end());//清空原数据,赋予新数据={3,5,2,6,4}
outArray.assign(5, 0);//5个0,清空原数据={0,0,0,0,0,}

leetcode中使用c++需要注意的点以及各类容器的初始化、常用成员函数相关推荐

  1. Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法:

    QTime::QTime() 默认构造函数,构造一个时,分,秒都为0的时间,如00:00:00.000(午夜) QTime::QTime(int h, int m, int s=0, int ms = ...

  2. LeetCode中常用语言的一些基本方法记录

    文章目录 LeetCode中常用语言的一些基本方法记录 Java 数组 数组的常用操作及方法 Arrays工具类 Collections类常用方法总结 二维数组 字符串常用属性及方法 JavaScri ...

  3. 中leetcode提示未登录_分享一款将 LeetCode 中 AC 的题目转化为 MarkDown 表格的插件...

    背景: 写博客的时候每当新增 LeetCode 题解时都需要在 LeetCode/README 手动更新表格, 非常费劲.因此构思了 crd-leetcode-cli 插件实现自动化同步更新 leet ...

  4. leetcode中的一些骚操作

    记录刷leetcode中的一些意想不到的用法 14. 最长公共前缀 题目:编写一个函数来查找字符串数组中的最长公共前缀.如果不存在公共前缀,返回空字符串 "". 思路:这道题lee ...

  5. leetcode中数组问题常用的处理方式

    对于数组的处理,是leetcode中一种非常常见的题型.针对数组结构的处理,我自己整理了一些常用的解题思路,便于在面对问题时,迅速思索解题方法. 1.滑窗法 2.双指针 3.构建左右侧双列表 4.利用 ...

  6. LeetCode中,python一行代码能干啥?

    导读 都说python语言简洁.集成高效,一行代码往往能实现很多复杂的操作,比如两变量交换.心形输出.打印乘法口诀等等.但这些总归还是不太实用.那么我们换做在LeetCode中,看看用python一行 ...

  7. leetcode中出现执行代码和提交时候答案不一致时候,

    标题:leetcode中出现执行代码和提交时候答案不一致时候, 可能是你的代码某个地方写错了 eg:我本来写的100,出现了题目描述的情况,改正后就没有问题了

  8. leetcode中出现Error - Found cycle in the TreeNode

    标题:leetcode中出现Error - Found cycle in the TreeNode leetcode中出现这种错误,说明你有些地方写错了,写不不够周全 eg:我的方法二和方法三之前就出 ...

  9. [LeetCode] LeetCode中与有向图相关的题目总结

    文章目录 相关题 743. 网络延迟时间 684. 冗余连接 相关题 LeetCode中有向图相关的题的题号为:743,685,684,399,332,310,210 743. 网络延迟时间 有 N ...

最新文章

  1. squid在企业网中的应用
  2. python程序只能使用源代码进行运行吗-谈谈 Python 程序的运行原理
  3. 对于细节的一些处理和领悟
  4. 使用Docker Compose部署基于Sentinel的高可用Redis集群
  5. 中英金融科技论坛:监管科技增长较快 区块链等新技术挑战监管能力
  6. iMazing六大主要功能介绍
  7. 单身狗应该怎么过七夕节?
  8. mysql的casewhen 作用_MySQL数据库之Mysql casewhen的三种用法
  9. MATLAB 产生带宽信号
  10. mfc匹配关键字颜色显示_如何在多台显示器上匹配颜色
  11. AndroidUSB—OTG通信
  12. MPU6050配置低功耗和中断
  13. 实验6、灰盒测试实验
  14. java博客论坛设计报告_javaweb课程设计报告个人博客网站的实现(Java).doc
  15. 京东开普勒iOS端对接遇到的奇葩问题
  16. 解决PYTHON爬取:RESPONSE.STATUS_CODE为418、403 问题
  17. 关于eBPF与可观测性,你想知道的都在这里
  18. XboxOne的kinect在Unity上的开发——安装与调试
  19. html程序员表白前端网页源码
  20. TAPD——需求关联

热门文章

  1. 《javaScript100例|04》自动播放——Js幻灯片缓冲效果
  2. 对安卓应用进行加固签名,为上架各大应用市场做准备
  3. Sequence.js 实现带有视差滚动特效的图片滑块
  4. Unity3D实践系列03,使用Visual Studio编写脚本与调试
  5. 基于python语言下的UI自动化测试框架搭建(四)
  6. js 实现简单的轮询
  7. 图像处理中常见的时域与频域区别与关系
  8. MFC控件编程之组合框跟列表框
  9. 解决swiper-slide在ion-slide-box不滑动的问题(暂且这么描述)
  10. Linux学习笔记006-启动流程