大佬们,这里赋值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]没问题,一赋值就出错,这是为什么啊?

新手小白求帮助!!

vector<int>count(N);试试

数组越界了,你写个打印语句把i,index的值打印一下就知道了。

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y