2013-07-11 20 views
0

我遇到了一个奇怪的问题。我试图用一个函数填充矢量,然后用另一个函数输出它。即使函数被调用后,矢量仍然是空的,我相信它正确地填充了它。这是我的代码到目前为止。其结果是函数填充矢量,但它在某个点上变为空。

“矢量 in.txt 搜索输入输入文件名扔‘的std :: out_of_range’ 什么()的实例终止后,被称为:矢量:: _ M_range_check 中止(核心转储) “

#include <iostream> 
    #include <cassert> 

    #include<vector> 
    #include "ArrayUtilities.h" 


    using namespace std; 

    void fillArray(istream& io, std::vector<int> a, int& actualSize) 
    { 
     int temp,i=0; 
     io>>temp; 
     while (temp!=-999) 
     { 
     a.push_back(temp); 
      io>>temp; 
      i++; 
     } 

     actualSize=i; 
    } 



    void outputArray(ostream& os, 
      std::vector<int> a, 
      const int actualSize, 
      const string& info) 
    { 
os<<info<<"\n"; 
for (int w=0;w<actualSize;++w) 
{ 
    os<< a.at(w)<<" "; 

} 
os<<"\n"; 
} 

INT主要(){

int actualSize; 
string fileName; 
string info; 


std::vector<int> a; 
cout << "Enter the input file name "; 
cin >> fileName; 
ifstream inData; 
ofstream outData; 
inData.open(fileName.c_str()); 
outData.open("out.txt"); 
int searchItem; 
inData>>info; 
inData>>searchItem; 
fillArray (inData, a, actualSize); 
cout <<"Search in vector\n"; 
outData<<"Search in vector\n"; 
    outputArray(outData, a, actualSize, info); 
outputArray(cout, a, actualSize, info); 
//sequential search 
int position; 
position=seqSearch(a,actualSize,searchItem); 
if (position > 0) 
    { 
     cout << "Sequential Search: SearchItem " 
       << searchItem 
       << " is on position " 
       << position 
       << "\n"; 
     outData << "Sequential Search: SearchItem " 
       << searchItem 
       << " is on position " 
       << position 
       << "\n"; 
    } 
    else 
    { 
     cout << "Sequential Search: SearchItem " 
       << searchItem 
       << " is not in the list\n"; 
     outData << "Sequential Search: SearchItem " 
       << searchItem 
       << " is not in the list\n"; 
    } 

感谢你的帮助

回答

3

您的函数具有向量的本地副本。它不会影响作为参数传递的向量。你可以通过传递一个向量来解决这个问题:

void fillArray(istream& io, std::vector<int>& a, int& actualSize) 
//          ^
+0

谢谢你解决了这个问题 – user2571171

0

juanchopanza在代码中显示了这个错误。 我会推荐一种不同的风格。

更改fillArray到:

std::vector<int> fillArray(istream& io) 
{ 
    std::vector<int> response; 
    int temp; 
    io>>temp; 
    while (temp!=-999) { 
     response.push_back(temp); 
     io>>temp; 
    } 
    return response; 
} 

用于主:

int main() 
{ 
    int actualSize; 
    string fileName; 
    string info; 

    std::vector<int> a; 
    cout << "Enter the input file name "; 
    cin >> fileName; 
    ifstream inData; 
    ofstream outData; 
    inData.open(fileName.c_str()); 
    outData.open("out.txt"); 
    int searchItem; 
    inData>>info; 
    inData>>searchItem; 
    a = fillArray(inData); 
    // If you really like actualSize add 
    actualSize = a.size(); 
    cout <<"Search in vector\n"; 
    outData<<"Search in vector\n"; 
     outputArray(outData, a, a.size(), info); 
    ... 
} 

Natuarally我觉得更容易阅读。根据这个讲话Chandler Carruth更容易优化。