所以这是我的主要方法:
#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()
显示向量时,它会显示内存位置:
答案 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的大小;它只使传感器准备好接受那么多元素,这样它就不必重新分配内存,并且可以复制周围的东西。这纯粹是一种优化;如果您只是在程序中注释掉预留调用,它的行为将完全相同。唯一可能改变的是性能和内存使用情况。