如何使用指针修改矢量

时间:2013-01-03 19:01:04

标签: c++ vector

所以这是我的主要方法:

#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()显示向量时,它会显示内存位置:

it won't work

3 个答案:

答案 0 :(得分:4)

vector<string> v[10];创建一个包含10个向量的数组,这可能不是您想要的。

创建一个向量,将其作为参数传递,并输出其内容:

vector<string> v;
myobject.vectorfiller(v);
for(int i =0; i < v.size(); i++){
    cout << v[i];
}

答案 1 :(得分:1)

同意,大小不应该是10,应该是size(),count&lt;

答案 2 :(得分: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);

预留不会改变v的大小;它只使传感器准备好接受那么多元素,这样它就不必重新分配内存,并且可以复制周围的东西。这纯粹是一种优化;如果您只是在程序中注释掉预留调用,它的行为将完全相同。唯一可能改变的是性能和内存使用情况。