c++ - 将二维 vector 初始化为类变量 C++

标签 c++ class vector

我正在构建一个类,其中一个变量是一个二维 vector 。我如何设置它以便我有一个初始大小?我尝试了下面的操作,但出现错误,在数字常量之前应为“,”或“...”。另外,我尝试为 pncode 设置值的每一行都出现错误,数组下标的无效类型“[int]”。

这是类:

#ifndef POSTNET_H_
#define POSTNET_H_

#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>
using namespace std;

class postnet
{
private:
    vector<vector<int>> pncode(5, vector<int>(5));
    void encode(vector<int> zip)
    {
        for(int i = 0; i < 5; i++)
        {
            if(zip[i] == 1 || zip[i] == 2 || zip[i] == 3 || zip[i] == 4 || zip[i] == 5 || zip[i] == 6)
                pncode[i][0] = 0;
            else
                pncode[i][0] = 1;

            if(zip[i] == 1 || zip[i] == 2 || zip[i] == 3 || zip[i] == 7 || zip[i] == 8 || zip[i] == 9)
                pncode[i][1] = 0;
            else
                pncode[i][1] = 1;
            if(zip[i] == 1 || zip[i] == 4 || zip[i] == 5 || zip[i] == 7 || zip[i] == 8 || zip[i] == 0)
                pncode[i][0] = 0;
            else
                pncode[i][0] = 1;
            if(zip[i] == 2 || zip[i] == 4 || zip[i] == 6 || zip[i] == 7 || zip[i] == 9 || zip[i] == 0)
                pncode[i][0] = 0;
            else
                pncode[i][0] = 1;
            if(zip[i] == 3 || zip[i] == 5 || zip[i] == 6 || zip[i] == 8 || zip[i] == 9 || zip[i] == 0)
                pncode[i][0] = 0;
            else
                pncode[i][0] = 1;
        }
    }
    void decode(vector<int> zip)
    {
        int zipd[5];

        for(int i = 0; i < 5; i++)
        {
            zipd[0] = pncode[i][0] * 7;
            zipd[1] = pncode[i][1] * 4;
            zipd[2] = pncode[i][2] * 2;
            zipd[3] = pncode[i][3] * 1;
            zipd[4] = pncode[i][4] * 0;

            for(int j = 0; j < 5; j++)
            {
                zip[i] += zipd[j];
            }
            if(zip[i] == 11)
                zip[i] = 0;
        }
    }

public:
    postnet()
    {
        for(int i = 0; i < 5; i++)
            for(int j = 0; j < 5; j++)
                pncode[i][j] = 0;
    }
    postnet(vector<int> zip)
    {
        encode(zip);
    }
    postnet(vector<vector<int> > pnc)
    {
        for(int i = 0; i < 5; i++)
            for(int j = 0; j < 5; j++)
                pncode[i][j] = pnc[i][j];
    }
    void print_zip()
    {
        vector<int> zipc(5);
        decode(zipc);

        for(int i = 0; i < 5; i++)
            cout << zipc[i];

        cout << endl;
    }

    void print_pncode()
    {
        cout << "1";
        for(int i = 0; i < 5; i++)
            for(int j = 0; j < 5; j++)
                cout << pncode[i][j];
        cout << "1" << endl;
    }

};


#endif /* POSTNET_H_ */

最佳答案

您现在拥有的代码,vector<vector<int>> pncode(5, vector<int>(5)); ,对于 C++11 编译器来说就足够了。在那之前,你必须初始化 pncode在你的构造函数中。 (您可能还需要在尖括号之间添加一个空格;>>。)

postnet(vector<int> const &zip)
    : pncode(5, vector<int>(5))
{
    encode(zip);
}
postnet(vector<vector<int> > const &pnc = vector<vector<int> >(5, vector<int>(5)))
{
    assert(pnc.size()==5);
    for (int i=0;i<pnc.size();++i)
        assert(pnc[i].size()==5);

    pncode = pnc;
}

我还冒昧地将您的默认构造函数替换为默认参数,将参数类型更改为 const&,并消除了 vector 元素的手动复制。

关于c++ - 将二维 vector 初始化为类变量 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11350112/

相关文章:

c++ - OpenGL - 将变换应用于 3D 空间中的多边形

c++ - libtorrent-rasterbar 和 Visual Studio 2013

php - 为什么在使用命名空间时必须包含 PHP 文件?

C++ 无法创建 vector

C++ vector 元素在不同时间访问时是不同的

c++ - 类型名称不允许输出MIDI文件值

c++ - vector 中存储的对象,它们何时被销毁?

Java实现储蓄账户到支票账户银行转账的方法

c++ - std::push_back 使用起来相对昂贵吗?

c++ - 使用输入执行程序的 Shell 脚本