南极来 2021-04-20 22:42 采纳率: 100%
浏览 98
已采纳

大佬们,这里赋值vector元素为啥为报vector subscript out of range?

#include <iostream>
using namespace std;
#include<vector>

//求最大间隙
//输入N 数字个数
//输入N 个数字输出结果
int main() {
	double N;
	int i;
	cin >> N;
	if (N < 2) {
		return 0;
	}	
	vector<double> array(N);


	for ( i = 0;i < N; i++)
	{
		int a;
		cin >> a;
		array[i] = a;
	}
	//只有一个数没有间隙 

	/*对桶进行初始化*/
	//每个桶的最大值初始化了一个最小数
	//每个桶的最大值初始化了一个最小数
	//这样是为了保证至少能够被array中的最大或最小数替换掉 
	//虽然定义了N个桶,但必然至少有一个桶是不会被用的 
	//记录每个桶每个桶被分到的数字
	vector<int>count(0);
	//记录每个桶中最大值
	vector<double>max(N);
	//记录每个分桶中最小值
	vector<double>min(N);
	
	/*找出梯队长度*/
	// (MAX - MIN ) / (N-1)
	double MAX = array[0], MIN = array[0];
	for (i = 1; i < N; i++) {
		if (array[i] > MAX) {
			MAX = array[i];
		}
		if (array[i] < MIN) {
			MIN = array[i];
		}
	}
	// 数字全都一样的情况 
	if (MAX - MIN == 0) {
		return 0;
	}
	double len = (MAX - MIN) / (N - 1);

	/*把n个数放到n-1个桶中,必然至少一个桶没放数,至少一个,因为我定义了n个桶*,而又是按n-1划分的*/
	int index;
	for (i = 0; i < N; i++) {
		index = (int)((array[i] - MIN) / len);
		if (min[index] > array[i])
			min[index] = array[i];		
		if (max[index] < array[i])
			max[index] = array[i];

		count[index]++;
	}
	/*计算最大间隙*/
	int x, y;
	double Gap = len, last, now;
	for (i = 0; i < N - 1;) {
		x = i;
		last = max[x];
		if (count[i + 1] == 0) {
			while (count[++i] == 0);
			y = i;
		}
		else {
			y = i + 1;
		}
		now = min[y];
		if (now - last > Gap) {
			Gap = now - last;
		}
		i = y;
	}
	cout<<Gap<<endl;
	system("pause");
	return 0;
}

查了csdn说是越界,但是我也分配了空间了啊,访问max[0]没问题,一赋值就出错,这是为什么啊?

新手小白求帮助!!

  • 写回答

4条回答 默认 最新

  • lemon-l 2021-04-20 22:50
    关注

    vector<int>count(N);试试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么