C ++ Persistent Vector,用文本文件中的数据填充向量

时间:2015-06-30 10:57:06

标签: c++ dynamic vector

我目前正在尝试学习一些C ++,现在我陷入了使用向量的练习中。因此,任务是从文本文件中读取整数并将它们存储在应该是动态的向量中。

我想while循环有问题吗? 如果我开始这个,程序失败,如果我将矢量大小设置为6,我得到 6 0 0 0 0 0作为输出。

感谢任何提示。

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";
}

}

5 个答案:

答案 0 :(得分:2)

  1. 你不会长出载体。它是空的,无法容纳任何int个。您每次要添加其他int时都需要调整大小,或者使用自动放大矢量的push_back

  2. 您为每次迭代设置i = 0,因此您可以在每次迭代而不是下一次迭代时更改向量的第一个值。

  3. Go for:

        v.push_back(s);
    

    在你的循环中

    for(int i = 0; i < v.size(); i++) { // ...
    
      

    注:

         

    您通常不会对矢量大小/边界进行硬编码。使用std::vector的一个主要观点是它能够根据其大小动态行为。因此,处理向量的代码不应对有关对象的大小施加任何限制。

         

    示例:

         

    for(int i = 0; i < 6; i++){ cout << v[i] << "\n"; }

         

    要求向量至少有6个元素,否则(少于6个整数)可以访问超出范围的值(如果v包含的值超过6,则可能会遗漏元素)。

         

    使用

         

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

         

         

    for(std::vector<int>::const_iterator i = v.begin(); i != v.end(); ++i) { cout << *i << "\n"; }

         

         

    for(auto i = v.begin(); i != v.end(); ++i) { cout << *i << "\n"; }

         

         

    for(int x : v){ cout << x << "\n"; }

         

         

    for(auto && x : v){ cout << x << "\n"; }

         

         

    std::for_each(v.begin(), v.end(), [](int x){ std::cout << x << "\n"; });

         

    或以上可能预先存储v.size()v.end()

    的变体      

    或任何您喜欢的内容,只要您不对矢量的动态大小施加任何限制。

答案 1 :(得分:0)

错误就是这一行int i = 0; 因为你每次在while循环中声明i = 0。 要纠正这一点,请将此行从循环外移动。

注意:如果您将v声明为普通数组,例如int v[101],则此方法可行 当您使用std vectors时,您可以使用v.push_back(element);

将元素推送到向量的末尾

答案 2 :(得分:0)

问题出在i= 0行。修复这将在行v[i] = s中出现问题。

您总是在while循环中将i初始化为0,并且负责当前输出。你应该把它从while循环中移开。

修复之后,你还没有为那个向量分配内存,所以v[i]没有意义,因为它会超出边界访问内存。这将产生分段错误。相反,它应该是v.push_back(i),因为它会将元素添加到向量的末尾,并在需要时分配内存。

答案 3 :(得分:0)

如果您使用std::vector,则可以使用v.push_back(i)填充此向量

答案 4 :(得分:0)

v[i] = s; //error,you dont malloc room for vector

更改为:v.push_back(s);