关于C++ map容器迭代器越界的研究

本文通过一个实例介绍了如何使用C++的map容器和迭代器解决一个实际问题——小明买筷子问题。函数通过遍历输入的筷子数组,利用map存储每个长度的筷子数量,然后通过迭代器找到数量为奇数的筷子长度,从而找出丢失的筷子。当数据异常时,返回-1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数接口如下:

#include <map>
using namespace std;


/*
小明是个马大哈,某天他到超市买了若干双筷子(n < 20)
筷子的长度不尽相同,他把全部筷子都放在购物袋里面拿回家,路上不小心漏了一根
请你用程序帮他找出是漏掉的筷子是多长的。

输入:  剩下的筷子数组,如:1, 2, 3, 2, 1, 3, 2
返回值:漏掉的筷子长度,如上述输入返回:2(当输入的筷子数据异常时返回-1,如:找不到漏掉的筷子)

*/
int checkChopsticks(int chopsticks[], int arraySize)
{
 int *p = NULL;
 int i = 0;
 map<int, int> chopsticks_count;

 if(!chopsticks || arraySize < 0)
  return -1;

 p = (int *)chopsticks;
 for( i = 0; i < arraySize; i++ )
 {
  //chopsticks_count.insert( map<int,int>::value_type( p[i], 0 ) );
  chopsticks_count[p[i]]++;  
 }

 map<int, int>::iterator map_it;

 map_it = chopsticks_count.end();
 map_it--;<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值