将2d向量初始化为类变量C ++ [英] Initializing 2d vector as class variable C++
问题描述
我正在建立一个类,其中一个变量是2d向量。如何设置它以便有一个初始尺寸?我尝试了以下操作,但在数字常量之前出现错误,预期为,或 ...。另外,当我尝试为pncode设置值时,每行都会出错,数组下标的类型为[int]无效。
I'm building a class where the one variable is a 2d vector. How do I set it so I have an initial size? I tried the below but get an error, expected ‘,’ or ‘...’ before numeric constant. Plus I get errors for every line where i try to set a value to pncode, invalid types ‘[int]’ for array subscript.
这是该类:
#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
。 (而且您可能还需要在尖括号之间添加一个空格; >>
。)
The code you have now, vector<vector<int>> pncode(5, vector<int>(5));
, would suffice for a C++11 compiler. Until then, you have to initialize pncode
in your constructors. (and you may also need to add a space between the angle brackets; >>
.)
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& ;,并消除了矢量元素的手动复制。
I also took the liberty of replacing your default constructor with a default argument, changing the parameter types to const&, and eliminating the manual copying of vector elements.
这篇关于将2d向量初始化为类变量C ++的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!