如何定义一个包含可变维向量的类,以及如何使用这个类

How to define a class which contains a variable dimension vector and how to use this class?

本文关键字:何使用 向量 包含可 何定义 定义 一个      更新时间:2023-10-16

我想定义一个类,它包含可变维向量,我定义了一个构造函数来初始化它。

现在的问题是我该如何使用它?我想使用另一个向量来包含这个类对象的多个。

#include <iostream>
#include <vector>
using namespace std;
class block {
public:
    long Nx,Ny;
    vector<long> S;
    block(long &nx, long &ny):Nx(nx),Ny(ny),S((nx+1)*(ny+1),0) {}
};
int main() {
    vector<block> B;
    B.push_back(B(2,2));   //I believe this is wrong, but how can I do this?
    B.push_back(B(1,2));
    for(int k=B.begin(); k<=B.end(); k++) {
        for(int i=B[k].S.begin();i<=B[k].S.end();i++) {
        cout<<B[k].S[i];
        }
    }
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    return 0;
}
#include <iostream>
#include <vector>
using namespace std;
class block {
public:
    long Nx,Ny;
    vector<long> S;
    block(long nx, long ny):Nx(nx),Ny(ny),S((nx+1)*(ny+1),0) {}
        //^^^^^^^^^^^^^^^^ not necessary to use inference
};
int main() {
    vector<block> B;
    B.push_back(block(2,2));   //use block(2,2)
    for(int i=0;i<B[0].S.size();i++) {
    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^the right way to traversal the vector
        cout<<B[0].S[i];
    }
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    return 0;
}

我相信这就是您想要的:

B.push_back(block(2,2));
for(int bi = 0; bi < B.size(); bi++ )
{
    block & refBlock = B[bi];
    for( int i = 0; i < refBlock.S.size(); i++ ) {
        cout << refBlock.S[i] << "n";
    }
}

外循环通过矢量CCD_ 1。我们获取对B的一个元素的引用,这样我们就不必一直写B[bi],然后内部循环为该block输出S的所有元素。

如果你只想要向量B的第一个元素,那么你可以忘记外循环,用B[0]代替refBlock,或者这样做:

block & refBlock = B[0];
B.push_back(block(2,2));   
for(vector<long>::iterator i=B[0].S.begin();i<=B[0].S.end();i++) {
    cout<<*i;
}
#include <iostream>
#include <vector>
using namespace std;
class block {
public:
    long Nx,Ny;
    vector<long> S;
    block(long nx, long ny):Nx(nx),Ny(ny),S((nx+1)*(ny+1),0) {}
        //^^^^^^^^^^^^^^^^ not necessary to use inference
};
int main() {
    vector<block> B;
    B.push_back(block(2,2));   //use block(2,2)
    B.push_back(block(2,1));
    for (int k=0; k<=B.size(); k++) {
        block & refBlock = B[k];
        for(int i=0; i<=refBlock.S.size(); i++) {
            cout<<refBlock.S[i];
        }
        cout<<endl;
    }
    return 0;
}

我运行了这个程序,但结果很奇怪,输出如下:

00000000049
0000000

然而,我所期望的是:

000000000
000000