0

これが私の主な方法です。

#include <iostream>
#include "TextFileToArray.h"
#include <vector>
using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    TextFileToArray myobject("C:/bunz.txt");
    vector<string> v[10];

    myobject.vectorfiller(*v);

    for(int i =0; i<10; i++){

    cout << v;

    }
}

として知られているオブジェクトをmyobject呼び出し、メソッド/関数を呼び出します。メソッド/関数は次のとおりです。

int TextFileToArray::vectorfiller(vector<string>& givenpointer) {
    vector<string> *innervec = &givenpointer;
    const char * constantcharversion = path.c_str();
    ifstream filler(constantcharversion);

    string bunz;
    string lineoutliner = "Line ";
    string equalssign = " = ";
    int numbercounter = 1;
    while (!filler.eof()) {

        std::getline(filler, bunz, ';');
        if (bunz.empty()) {
            lineoutliner = "";
            numbercounter = 0;
            equalssign = "";
        }
        cout << lineoutliner  << numbercounter << equalssign << bunz <<endl;
        cout << "" << endl;
        innervec->push_back(bunz);

        numbercounter++;
    }
    filler.close();

    return 0;
}

これまでのところ、テキストファイルのテキストを表示しますが、何らかの理由でメモリアドレスをベクトルにプッシュするため、ベクトルをmain()表示すると、メモリの場所が表示されます。

動作しません

4

3 に答える 3

4

vector<string> v[10];10個のベクトルの配列を作成しますが、これはおそらくあなたが望むものではありません.

単一のベクトルを作成し、それをパラメーターとして渡し、その内容を出力します。

vector<string> v;
myobject.vectorfiller(v);
for(int i =0; i < v.size(); i++){
    cout << v[i];
}
于 2013-01-03T19:03:38.353 に答える
1

問題は、最初のベクトルの要素ではなく、ベクトルの配列を出力していることです。代わりに、メインでこれが必要です:

for (int i = 0; i < v[0].size(); i++) {
  cout << v[0][i] << endl;
}

PS: Luchian が言ったように、10 個のスロットを持つ 1 つのベクトルではなく、10 個のベクトルを作成しています。ベクトルを 1 つだけ取得するには、次のようにします。

vector<string> v;

また、10 について言及する必要はありません。要素をプッシュすると、ベクトルが大きくなります。前もって確保したいスペースの量がわかっている場合は、次のようにreserveメンバー関数を使用できます。

vector<string> v;
v.reserve(some_number);

reserve は v のサイズを変更しません。ベクトルがその多くの要素を受け入れる準備ができているだけなので、メモリを再割り当てしたり、物事をコピーしたりする必要はありません。これは純粋に最適化です。プログラムで予約呼び出しをコメントアウトするだけでも、まったく同じように動作します。変更される可能性があるのは、パフォーマンスとメモリ使用量だけです。

于 2013-01-03T20:37:57.067 に答える
1

同意します。サイズは 10 ではなく、size() であり、count<

于 2013-01-03T20:00:32.480 に答える