Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;永久向量,用文本文件中的数据填充向量 我目前正在尝试学习一些C++,现在我被一个向量中的练习所困扰。因此,任务是从文本文件中读取int,并将它们存储在向量中,向量应该是动态的_C++_Dynamic_Vector - Fatal编程技术网

C++;永久向量,用文本文件中的数据填充向量 我目前正在尝试学习一些C++,现在我被一个向量中的练习所困扰。因此,任务是从文本文件中读取int,并将它们存储在向量中,向量应该是动态的

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

我想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;
        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]
    不推送元素仍然会导致未定义的行为。这一半回答了问题。