一类中的C ++向量

时间:2016-02-04 19:27:34

标签: c++ arrays vector

我正在处理我上大学的工作表,问题是“允许用户从键盘输入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;
}

提前致谢

1 个答案:

答案 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;
    }
}