c语言map作为参数传递,C++中map和vector作形参时如何给定默认参数?

当使用C++中的map和vector的operator[]进行访问时,如果越界,map会尝试查找该键并返回默认值(通常是nullptr),而vector会触发未定义行为。在示例程序中,未定义行为导致了默认值的输出。解决这个问题的优雅方式是检查键是否存在或确保下标在有效范围内。文章讨论了如何避免这类问题以及operator[]在不同情况下如何处理越界访问。
摘要由CSDN通过智能技术生成

map和vector都可以用operator[]进行访问,map是用[]中的数据作为key进行查询,而vector是用[]中的数作为下标进行访问。

如果在用operator[]进行访问的时候出现了越界情况,即map没有这个键值对,或vector的大小小于下标数值,会发生什么情况?

struct node{int a{5};};

int main() {

map m1;

cout<

map m2;

cout<

vector v1(3);//需要指定vector大小,否则不能在没有push_back的情况用下标访问

cout<

vector v2(3);

cout<

}

结果:

5

0

5

0

由上面示例程序可看出map和vector在越界情况都会给出此类型的默认值,如果是基本类型,则返回零值;如果是struct或class,如果里面的变量定义了默认值,则返回定义的默认值,如果没有,返回零值。

之前遇到过这种特殊场景, 我用static变量比较恶心地解决了问题, 其实, 有更优雅的方式:

#include

#include

using namespace std;

int main ()

{

int a = int();

cout << a << endl;

vector v = vector();

for(vector::iterator it = v.begin(); it != v.end(); ++it)

{

cout << *it << endl;

}

return 0;

}

看下:

#include

#include

using namespace std;

void fun(int a, int b = 1, const vector &v=vector()) // 此处的const不能少,v也必须初始化(因为左边参数已经默认初始化)

{

}

int main ()

{

fun(1);

cout << "to end" << endl;

return 0;

}

不多说。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值