在一个类中初始化一个向量?

Posted

技术标签:

【中文标题】在一个类中初始化一个向量?【英文标题】:Initialize a vector in a class? 【发布时间】:2020-01-20 18:31:17 【问题描述】:

从上一个问题中我了解到我可以通过这种方式初始化 2D 向量:

vector<vector<double>> Example(3); 

代替:

vector<vector<double>> Example=,,

在这种情况下,我将在示例中提供三个“行”,对吗?

现在我想在一个类中进行初始化:

    class Perceptron()
     int NumbersOfRowsThatIwant;
     vector<vector<double>> Example(NumbersOfRowsThatIwant);
    ;

现在行数只在构造函数中定义:

Perceptron::Perceptron(int x)

  NumberOfRowsThatIwant=x;

但这可能是错误的,我该如何解决?

【问题讨论】:

使用成员初始化列表:en.cppreference.com/w/cpp/language/initializer_list 【参考方案1】:

你的意思好像是下面这个

#include <iostream>
#include <vector>

class Perceptron

public: 
    Perceptron( size_t n ) : Example( n ) 

private:
    std::vector<std::vector<double>> Example;
;

int main() 

    Perceptron p( 3 );

    return 0;

数据成员int NumbersOfRowsThatIwant; 是多余的,因为您总是可以获得像Examp;le.size() 这样的“行”数。例如

#include <iostream>
#include <vector>

class Perceptron

public: 
    using size_type = std::vector<std::vector<double>>::size_type;

    Perceptron( size_type n ) : Example( n ) 

    size_type row_number() const  return Example.size( ); 
private:
    std::vector<std::vector<double>> Example;
;

int main() 

    Perceptron p( 3 );

    auto n = p.row_number();

    std::cout << n << '\n';

    return 0;

程序输出是

3

如果您想使用具有预定义“行”数的默认构造函数,您可以定义类,例如

#include <iostream>
#include <vector>

class Perceptron

public: 
    using size_type = std::vector<std::vector<double>>::size_type;
    Perceptron() = default;
    Perceptron( size_type n ) : Example( n ) 

    size_type row_number() const  return Example.size( ); 
private:
    static const size_type DEFAULT_NUMBER = 3;
    std::vector<std::vector<double>> Example  DEFAULT_NUMBER ;
;

int main() 

    Perceptron p( 3 );

    auto n = p.row_number();

    std::cout << n << '\n';

    Perceptron p2;

    n = p2.row_number();

    std::cout << n << '\n';

    return 0;

【讨论】:

【参考方案2】:

您可以为此使用成员初始化器列表:

class Perceptron 
  private:
     int NumbersOfRowsThatIwant;
     vector<vector<double>> Example;
  public:
    Perceptron(int x);
;

Perceptron::Perceptron(int x): NumberOfRowsThatIwant(x),
                               Example(NumbersOfRowsThatIwant)
 

但请记住,初始化顺序仅取决于成员的声明顺序,而不取决于成员初始化器列表中的顺序。

【讨论】:

以上是关于在一个类中初始化一个向量?的主要内容,如果未能解决你的问题,请参考以下文章

在类中初始化向量

设置者不更改类中向量的数据

类中的错误二维向量类初始化

类中的 C++ 类作为自定义向量(如何初始化?)

在构造函数中初始化成员变量二维向量

编译类型向量类的私有成员时出错 - C++ [重复]