我正在处理我上大学的工作表,问题是“允许用户从键盘输入10个数字到数组中”但是我们被告知我们需要使用类和向量来完成这项任务。当我运行我的代码时,我得到一个错误说明:“表达式:矢量下标超出范围” 有人可以帮忙吗?
Array.h
#include <iostream>
#include <vector>
using namespace std;
class Array
{
private:
vector<int> lists;
public:
void fillArray();
void printForwards();
void halfandHalf();
void shiftArrayRight();
Array();
Array(vector<int>);
};
Array.cpp
#include "Array.h"
Array::Array()
{
lists[10];
}
Array::Array(vector<int> lists)
{
this->lists = lists;
}
void Array::fillArray()
{
for (int i = 0; i < 10; i++)
{
cin >> lists[i];
}
}
void Array::printForwards()
{
for (int i = 0; i < 10; i++)
{
cout << lists[i];
}
}
Source.cpp
#include <iostream>
#include "Array.h"
using namespace std;
int main()
{
Array list1,list2;
//fill array 1
list1.fillArray();
//fill array 2
list2.fillArray();
// print array 1
list1.printForwards();
//print array 2
list2.printForwards();
system("pause");
return 0;
}
提前致谢
答案 0 :(得分:3)
lists[10];
不会创建大小为10的向量。它将尝试访问空向量的第11个元素。如果要创建大小为10的向量,则可以使用
Array::Array() : lists(std::vector<int>(10, 0)) {}
我还建议你改变
Array::Array(vector<int> lists)
{
this->lists = lists;
}
要
Array::Array(vector<int> lists) lists(lists) {}
您还应该更改for循环以使用向量size()
而不是硬编码值
void Array::fillArray()
{
for (int i = 0; i < lists.size(); i++) // uses size()
{
cin >> lists[i];
}
}
void Array::printForwards()
{
for (int i = 0; i < lists.size(); i++) // uses size()
{
cout << lists[i];
}
}
或者,如果你有C ++ 11或更高版本,你可以使用ranged based for loop之类的
void Array::fillArray()
{
for (auto& e : lists)
{
cin >> e;
}
}
void Array::printForwards()
{
for (const auto& e : lists)
{
cout << e;
}
}