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

目录

  • 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,}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linq list 排序,Dictionary 排序

C# 对List成员排序的简单方法 http://blog.csdn.net/wanzhuan2010/article/details/6205884 LINQ之路系列博客导航 http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html 用一句Linq把一个集合的属性值根据条件改了&#xff0c;其他值不变 list去重 list.Where((x…

javascript Ajax 同步请求与异步请求的问题

先来看以下代码&#xff1a; var flagtrue; var index0; $.ajax({url: "http://www.baidu.com/",success: function(data){flagfalse;} }); while(flag){index; } alert(index); 请问最后alert的index的结果是多少&#xff1f; 可能有人会说0呗。实际上却没那么简单…

定义类的Python示例

The task to define a class in Python. 在Python中定义类的任务。 Here, we are defining a class named Number with an attribute num, initializing it with a value 123, then creating two objects N1 and N2 and finally, printing the objects memory locations and a…

十一、线性层

一、Linear Layers torch.nn.Linear(in_features, out_features, biasTrue, deviceNone, dtypeNone) 以VGG神经网络为例&#xff0c;Linear Layers可以将特征图的大小进行变换由(1,1,4096)转换为(1,1,1000) 二、torch.nn.Linear实战 将CIFAR-10数据集中的测试集二维图像[6…

easyui plugin——etreegrid:CRUD Treegrid

昨天写了一个koeasyui的同样的实现&#xff0c;感觉写的太乱&#xff0c;用起来十分麻烦&#xff0c;于是今天照着edatagrid&#xff0c;写了一个etreegrid&#xff0c;这样再用ko绑定就方便多了。 使用很简单,$(tableId).etreegrid({idField:parentIdField:,treeField:,saveUr…

expr

expr在linux中 是一个功能非常强大的命令。通过学习做一个小小的总结。 1、计算字符串的长度。我们可以用awk中的length(s)进行计算。我们 也可以用echo中的echo ${#string}进行计算&#xff0c;当然也可以expr中的expr length $string 求出字符串的长度。举 例[rootlocalhost …

leetcode 42. 接雨水 思考分析(暴力、动态规划、双指针、单调栈)

目录题目思路暴力法动态规划双指针法单调栈题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组…

chdir函数_PHP chdir()函数与示例

chdir函数PHP chdir()函数 (PHP chdir() function) The full form of chdir is "Change Directory", the function chdir() is used to change the current working directory. chdir的完整形式是“更改目录” &#xff0c; 功能chdir()用于更改当前工作目录。 Synt…

十二、Sequential

一、Sequential介绍 torch.nn.Sequential(*args) 由官网给的Example可以大概了解到Sequential是将多层网络进行便捷整合&#xff0c;方便可视化以及简化网络复杂性 二、复现网络模型训练CIFAR-10数据集 这里面有个Hidden units隐藏单元其实就是连个线性层 把隐藏层全部展开整…

1064-快速排序

描述 给定输入排序元素数目n和相应的n个元素&#xff0c;写出程序&#xff0c;利用内排序算法中快速排序算法进行排序&#xff0c;并输出排序最后结果的相应序列。 输入 共两行&#xff0c;第一行给出排序元素数目n&#xff0c;第二行给出n个元素&#xff0c;1≤n≤100000&…

社交问答:取代BBS的Web2.0革命

编者按&#xff1a;本文由乐维UP创始人俞越撰写&#xff0c;你也可以点击这里关注俞越的新浪微博。 BBS在中国的兴起是在95年&#xff0c;之后以惊人的速度发展起来。从2011年开始&#xff0c;国内的问答社区也如当年的BBS一样&#xff0c;大量涌现快速成长&#xff0c;大体分为…

单调栈 leetcode整理(三)

目录42. 接雨水思路分析901. 股票价格跨度思路581. 最短无序连续子数组思路一&#xff1a;排序双指针思路二&#xff1a;单调栈思路三&#xff1a;双指针(最省时)42. 接雨水 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&…

python 抠图 锯齿_Python | 绘图中的抗锯齿

python 抠图 锯齿Antialiasing is another important feature of Matplotlib and in this article, we will review how to use this functionality. pyplot.antialiased() is an inbuilt function in matplotlib.pyplot which performs our required operation. 抗锯齿是Matpl…

apk 反编译

引用&#xff1a;http://code.google.com/p/dex2jar/issues/detail?id20 最新版:dex2jar http://code.google.com/p/dex2jar/downloads/list 错误&#xff1a;http://code.google.com/p/dex2jar/issues/detail?id20 这段时间在学Android应用开发&#xff0c;在想既然是用Jav…

OpenDiscussion_DataDrivenDesign

本文源于公司内部技术交流&#xff0c;如有不当之处&#xff0c;还请指正。 Content&#xff1a; 1. What is Data-driven design?2. WPF revolution.3. More about ObservableCollection.4. Question.1. What is Data-driven design?Data-driven design: is a design of usi…

十三、Loss Functions

一、Loss Functions损失函数 损失函数的作用&#xff1a; 1&#xff0c;损失函数就是实际输出值和目标值之间的差 2&#xff0c;由这个差便可以通过反向传播对之后的数据进行更新 Loss Functions官网给的API 里面由很多种损失函数&#xff0c;不同的损失函数有其不同的用途及表…

leetcode 滑动窗口小结 (一)

目录小结以及代码框架76. 最小覆盖子串滑动窗口代码以及注释567. 字符串的排列滑动窗口438. 找到字符串中所有字母异位词3. 无重复字符的最长子串化简框架reference小结以及代码框架 滑动窗口技巧属于双指针技巧。 该算法的思路为维护一个窗口&#xff0c;不断滑动&#xff0c…

linux命令行界面_Linux中的命令行界面

linux命令行界面If you are like most people, you are probably most familiar with using a Graphical User Interface (GUI) to control your computer. Introduced to the masses by Apple on the Macintosh computer and popularized by Microsoft, a GUI provides an eas…

一道小小面试题的细节分析

一道小小面试题的细节分析 今天突然想到以前遇到的一个问题&#xff0c;题目如下&#xff08;可能绝大多数人都遇到过&#xff09;&#xff1a; 1 class A2 {3 public A()4 {5 PrintFields();6 }7 public virtual void Pr…

十四、OPTIM

一、torch.optim torch.optim.Optimizer(params, defaults)优化器官网说明 由官网给的使用说明打开看出来优化器实验步骤&#xff1a; ①构造选择优化器 例如采用随机梯度下降优化器SGD torch.optim.SGD(beyond.parameters(),lr0.01)&#xff0c;放入beyond模型的参数param…