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) {}
};

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;
}
4

4 に答える 4

1
#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;
}
于 2013-05-10T03:16:45.030 に答える
1

これがあなたが望むものだと思います:

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";
    }
}

外側のループは vector を通過しBます。の 1 つの要素への参照を取得して、Bを書き続ける必要がないようにしB[bi]、内側のループがSfor thatのすべての要素を出力しblockます。

vector の最初の要素のみが必要な場合はB、外側のループを忘れて、B[0]代わりに を使用するか、次のようにrefBlockします。

block & refBlock = B[0];
于 2013-05-10T03:17:40.050 に答える
1
B.push_back(block(2,2));   
for(vector<long>::iterator i=B[0].S.begin();i<=B[0].S.end();i++) {
    cout<<*i;
}
于 2013-05-10T03:25:14.577 に答える
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)
    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
于 2013-05-10T03:37:11.730 に答える