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

同意,size不应该是10,应该是size(),count<

于 2013-01-03T20:00:32.480 回答
1

问题是您正在打印向量数组,而不是第一个向量中的元素。相反,你希望在你的主要:

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

PS:正如 Luchian 所说,您正在创建 10 个向量,而不是一个具有 10 个插槽的向量。要仅获取一个向量,请执行以下操作:

vector<string> v;

你也不需要提到10;当您将元素推到向量上时,向量会增长。如果您碰巧提前知道要保留多少空间,则可以使用Reserve成员函数,如下所示:

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

Reserve 不会改变 v 的大小;它只会使向量准备好接受那么多元素,因此它不必重新分配内存,也不必复制太多东西。这纯粹是一种优化;如果您只是简单地注释掉程序中的保留调用,它的行为将完全相同。唯一可能改变的是性能和内存使用。

于 2013-01-03T20:37:57.067 回答