Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量下标超出范围VS2013_C++_Vector - Fatal编程技术网

C++ 向量下标超出范围VS2013

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<

有人能解释一下我做错了什么吗?在VS2013中编译此代码后,程序启动并打印2-3列,我得到以下错误:

向量下标超出范围

有什么不对劲吗

#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];