C++中map和vector作形参时如何给定默认参数?

 更新时间:2019年04月03日 10:17:02   作者:stpeace  
今天小编就为大家分享一篇关于C++中map和vector作形参时如何给定默认参数?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

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

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

struct node{int a{5};};
int main() {
  map<string,node> m1;
  cout<<m1["s"].a<<endl;
  map<string,int> m2;
  cout<<m2["s"]<<endl;
  vector<node> v1(3);//需要指定vector大小,否则不能在没有push_back的情况用下标访问 
  cout<<v1[0].a<<endl;
  vector<int> v2(3);
  cout<<v2[0];
}

结果:

5
0
5
0

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

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

#include <iostream>
#include <vector>
using namespace std;
int main ()
{
 int a = int();
 cout << a << endl;
 vector<int> v = vector<int>();
 for(vector<int>::iterator it = v.begin(); it != v.end(); ++it)
 {
 cout << *it << endl;
 }
 return 0;
}

看下: 

#include <iostream>
#include <vector>
using namespace std;
void fun(int a, int b = 1, const vector<int> &v=vector<int>()) // 此处的const不能少,v也必须初始化(因为左边参数已经默认初始化)
{ 
}
int main ()
{
 fun(1);
 cout << "to end" << endl;
 return 0;
}

不多说。

总结

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

相关文章

  • C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解

    C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解

    这篇文章主要介绍了C语言中指针 int *p=0;和int *p;*p=0;和”&“有什么关系和区别,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • QT中QDataStream二进制数据读写的实现

    QT中QDataStream二进制数据读写的实现

    本文主要介绍了QT中QDataStream二进制数据读写的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 用C语言实现通讯录

    用C语言实现通讯录

    这篇文章主要为大家详细介绍了用C语言实现通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 详解基于Matlab的空心散点检测

    详解基于Matlab的空心散点检测

    这篇文章主要介绍了如何利用Matlab实现空心散点检测,文中的示例代码讲解详细,对我们学习Matlab有一定的帮助,感兴趣的可以跟随小编了解一下
    2022-02-02
  • C++ Boost Xpressive示例分析使用

    C++ Boost Xpressive示例分析使用

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • C语言实现简单猜数字小游戏

    C语言实现简单猜数字小游戏

    这篇文章主要为大家详细介绍了C语言实现简单猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • VC读配置文件实例

    VC读配置文件实例

    这篇文章主要介绍了VC读配置文件的方法,实例讲述了VC针对文件操作的技巧,需要的朋友可以参考下
    2014-10-10
  • C++ 标准模板库 STL 顺序容器详解

    C++ 标准模板库 STL 顺序容器详解

    这篇文章主要介绍了C++ 标准模板库 STL 顺序容器详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • C语言实现循环队列

    C语言实现循环队列

    这篇文章主要为大家详细介绍了C语言实现循环队列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • C++实现xml解析器示例详解

    C++实现xml解析器示例详解

    这篇文章主要为大家介绍了C++实现xml解析器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论