C++ 向量下标超出范围VS2013
有人能解释一下我做错了什么吗?在VS2013中编译此代码后,程序启动并打印2-3列,我得到以下错误: 向量下标超出范围 有什么不对劲吗C++ 向量下标超出范围VS2013,c++,vector,C++,Vector,有人能解释一下我做错了什么吗?在VS2013中编译此代码后,程序启动并打印2-3列,我得到以下错误: 向量下标超出范围 有什么不对劲吗 #include "stdafx.h" #include <iostream> #include <stdlib.h> #include <ctime> #include <vector> using namespace std; vector<int> printVector(vector<
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <ctime>
#include <vector>
using namespace std;
vector<int> printVector(vector<int> vectorToPrint)
{
for (unsigned int i = 0; i < vectorToPrint.size(); i++)
{
cout << vectorToPrint[i] << ",";
}
cout << endl;
return vectorToPrint;
}
int getRandomNumber(int min,int topNumber)
{
int number = min + (rand() % (int)(topNumber - min + 1));
return number;
}
vector<int> getSixNumbers(vector<int> numbers){
vector<int> randomNumbers;
for (int i = 0; i < 6; i++)
{
int(*pointerToRandomNumber)(int, int) = getRandomNumber;
int randomNumber = pointerToRandomNumber(0, numbers.size());
int numberRandomNumber = numbers[randomNumber];
numbers.erase(numbers.begin() + randomNumber);
randomNumbers.push_back(numberRandomNumber);
}
return randomNumbers;
}
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(NULL));
int g;
vector<int> numbers;
for ( int i = 1; i < 50; i++)
{
numbers.push_back(i);
}
int a = 1;
do
{
vector<int>(*pointerToSixNumbers)(vector<int>) = getSixNumbers;
vector<int> newVector = pointerToSixNumbers(numbers);
printVector(newVector);
++a;
}while (a < 100);
cout << endl;
cin >> g;
return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
使用名称空间std;
矢量打印矢量(矢量打印)
{
for(无符号整数i=0;i向量[0]
-向量[5]
。您将(0
,6
)传递到get random number函数,该函数转换为第一行:
int number = 0 + (rand() % (int)(6 - 0 + 1));
或
它能够返回6,并且在使用后续行访问数字数组时超出了vectors范围。删除+1后,由于使用了vector.size()函数,该问题应该会消失
int number = min + (rand() % (int)(topNumber - min));
问题就在眼前
int number = min + (rand() % (int)(topNumber - min + 1));
应该是
int number = min + (rand() % (int)(topNumber - min));
否则,您将得到超出范围的索引
我曾经
cout << "size: " << numbers.size() << endl;
cout << "randomNumber: " << randomNumber << endl;
跟踪问题。当使用调试器单步执行代码时,您观察到了什么?您正在练习函数指针吗?不直接调用函数的原因是什么?它停在这一行int numberRandomNumber=numbers[randomNumber];如果直接调用函数,则不会编译。
int number = min + (rand() % (int)(topNumber - min));
cout << "size: " << numbers.size() << endl;
cout << "randomNumber: " << randomNumber << endl;
int numberRandomNumber = numbers[randomNumber];