如何接受用户输入的矢量大小?

时间:2016-07-27 08:02:25

标签: c++ vector stdvector

我已将std::vector<Training> _classes;中的Training.h声明为私有变量。我想首先从用户那里获取_noOfClasses然后使用那么多元素初始化vector,但我收到错误:

  

调用没有适当的operator()或类的类类型的对象   转换函数到指针到函数类型

Training::Training() : _noOfClasses(0) {
    std::cout << "Enter the number of class\n";
    std::cin >> _noOfClasses;
    _classes(_noOfClasses); //Error
}

如何从用户输入中单独初始化vector的大小?

3 个答案:

答案 0 :(得分:3)

_classes(_noOfClasses);语法不正确,_classes不是仿函数,您无法在其上调用函数。您可以使用std::vector::resize()调整其大小以包含_noOfClasses个元素。

_classes.resize(_noOfClasses); 

答案 1 :(得分:2)

您应该根据需要使用_classes.reserve()或_classes.resize() 要了解他们,请点击此链接:Choice between vector::resize() and vector::reserve()

答案 2 :(得分:1)

我会颠倒顺序 - 除非Training类是“I / O”类,否则我会将Training类的构造与任何用户输入分开。首先获取类的数量,然后从获得的用户输入中构造Training实例。

std::size_t noOfClasses;
std::cout << "Enter the number of class\n";
std::cin >> noOfClasses;
// ...
Training::Training(std::size_t noOfClasses)
: classes_(noOfClasses), noOfClasses_(noOfClasses) {
}

也就是说,您可以将I / O分解为自己的函数,并将结果用作参数(省略错误检查);

std::size_t GetTrainingSize()
{
    std::size_t i;
    std::cout << "Enter the number of class\n";
    std::cin >> i;
    return i;
}

Training::Training() : classes_(GetTrainingSize()) {
    // if needed...
    _noOfClasses = classes_.size();
}

要在构建后调整std::vector的大小,可以使用成员resize()方法。然后OP代码看起来像;

Training::Training() : _noOfClasses(0) {
    std::cout << "Enter the number of class\n";
    std::cin >> _noOfClasses;
    _classes.resize(_noOfClasses);
}