如何在c ++中引用或调用在其他while循环中创建的向量?

时间:2017-07-10 01:17:58

标签: c++ vector

我正在尝试用C ++编写一个小程序来测试插入排序和其他排序算法的性能。我想在txt文件中存储一个非常大的数字,让我的程序首先读取它并将每个数字存储到一个向量中。因此排序算法可以轻松处理这种向量。

但是我遇到了一个问题,我不知道如何在插入排序部分调用向量(num1)。由于向量在排序之前在while循环中初始化。编译器无法识别它,因此我的程序无法继续。所以我很感激有人给我一些建议来解决这个问题,或者对我的代码给出你的想法。非常感谢!

#include <iostream>
#include<fstream>
#include<string>
#include<vector>
using namespace std;

int main() {
    //To read file: 
ifstream num("test.txt");
char num_arry[1000000];
if (!num)
{
    cout << "File load error,please check if file exist" << endl;
}
while (!num.eof())
{
    num >> num_arry;
    int number = stoi(num_arry); // convert char to int     
    vector<int> num1;  //set a new vector to store file data numbers
    num1.push_back(number); // push int in the vector

}

// Insertion sort start:
for (int i = 1; i < num1.size(); i++) {
    int element = num1[i];
    int j = i;
    while (num1[j - 1] > element) {
        num1[j] = num1[j - 1];
        j = j - 1;
        num1[j] = element;
    }
}

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

return 0;
}

1 个答案:

答案 0 :(得分:3)

只需在vector<int> num1循环之前将while移至。这样,它就存在于该循环之外,特别是在您想要使用它的下面的代码区域中。

你所拥有的东西在任何情况下都无法工作,即使如果范围在循环结束时仍然存在,因为向量是在所述循环的每次迭代中重新创建的 - 它最终将成为只有最后一个元素的向量。

换句话说(简化形式):

while (!num.eof()) {
    vector<int> num1;
    num1.push_back(something);
}
// Cannot see num1 here.

会变成:

vector<int> num1;
while (!num.eof()) {
    num1.push_back(something);
}
// num1 is usable here.

您可能还想重新考虑将数字加载到字符数组中,然后在其上调用stoi(除非您有特定的理由这样做)。 C ++流的东西完全能够直接读入非字符数据类型,例如:

vector<int> numArray;
{
    int number;
    while (numInputStream >> number)
        numArry.push_back(number);
}