C++;永久向量,用文本文件中的数据填充向量 我目前正在尝试学习一些C++,现在我被一个向量中的练习所困扰。因此,任务是从文本文件中读取int,并将它们存储在向量中,向量应该是动态的
我想while循环有问题吧? 如果我启动这个程序,程序会失败,如果我将向量大小设置为6,我得到 60作为输出 谢谢你的提示C++;永久向量,用文本文件中的数据填充向量 我目前正在尝试学习一些C++,现在我被一个向量中的练习所困扰。因此,任务是从文本文件中读取int,并将它们存储在向量中,向量应该是动态的,c++,dynamic,vector,C++,Dynamic,Vector,我想while循环有问题吧? 如果我启动这个程序,程序会失败,如果我将向量大小设置为6,我得到 60作为输出 谢谢你的提示 int main() { const string filename = "test.txt"; int s = 0; fstream f; f.open(filename, ios::in); vector<int> v; if (f){ while(f >> s){ int i = 0; v[i] = s
int main()
{
const string filename = "test.txt";
int s = 0;
fstream f;
f.open(filename, ios::in);
vector<int> v;
if (f){
while(f >> s){
int i = 0;
v[i] = s;
i = i+1;
}
f.close();
}
for(int i = 0; i < 6; i++){
cout << v[i] << "\n";
}
intmain()
{
常量字符串filename=“test.txt”;
int s=0;
fsf;
f、 打开(文件名,ios::in);
向量v;
如果(f){
而(f>>s){
int i=0;
v[i]=s;
i=i+1;
}
f、 close();
}
对于(int i=0;i<6;i++){
cout错误是这一行int i=0;
因为在while循环中每次都声明i=0。
若要更正此错误,请将此行从循环中移出
注意:如果您像普通数组一样声明v,例如intv[101]
当您使用std vectors
时,您可以使用v.push_back(element);
您不增加向量。它是空的,不能容纳任何int
s。您需要在每次添加另一个int
时调整它的大小,或者使用push_back
自动放大向量
为每次迭代设置i=0
,以便每次迭代都更改向量的第一个值,而不是下一个值
追求:
v.push_back(s);
在你的循环和
for(int i = 0; i < v.size(); i++) { // ...
for(inti=0;i
备注:
通常不需要硬编码向量大小/边界。使用std::vector
的一个要点是它能够根据其大小动态地进行操作。因此,处理向量的代码不应该对相应对象的向量大小施加任何限制
例如:
对于(int i=0;i<6;i++){cout问题在i=0
行中。修复该问题将在v[i]=s
行中产生问题
您总是在while循环中将i
初始化为0
,这负责当前输出。您应该将其移出while循环
修复后,您没有为该向量分配内存,因此v[i]
没有意义,因为它将访问超出边界的内存。这将导致分段错误。相反,它应该是v.push_back(i)
,因为这会将元素添加到向量的末尾,并在需要时分配内存。如果使用std::vector
,则可以使用v.push_back(i)
填充此向量
v[i] = s; //error,you dont malloc room for vector
更改为:v.push_back(s);
您一直在设置v[0]
,因为i
每次都是0
。顺便说一句,v
是空的,v[0]
实际上不存在。您想执行v.push_back(s);
和for(auto&&n:v)std::cout另外,我认为>>是位向右移位的二进制运算符。也许您想要运算符>(大于)?@ChemiCalChems:这部分是正确的。>>是在从流中读取时使用的。没错,没有将f视为流,而是将其视为变量。很抱歉出错。std::cout@ChemiCalChems是的,>>是用于位移位的二进制运算符,但>>也用于从流中加载数据(fstrem,iostream)@encrypt是的,我知道。我只是没有注意到f属于fstream类型。这并没有提供问题的答案。若要评论或要求作者澄清,请在他们的帖子下方留下评论。@MohitJain确保它没有提及代码中的所有问题,但请致电v[I]
不推送元素仍然会导致未定义的行为。这一半回答了问题。