函数填充向量,但它在某个时刻变为空
Function fills vector yet it becomes empty at some point.
我遇到了一个奇怪的问题。我试图用一个函数填充向量,然后用另一个函数输出它。即使在函数被调用后,向量也会显示为空,我相信它是正确填充的。这是我迄今为止的代码。结果是
"在.txt中输入输入文件名在矢量中搜索在抛出"std::out_of_range"的实例后调用terminatewhat():矢量::_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 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;
fillArray (inData, a, actualSize);
cout <<"Search in vectorn";
outData<<"Search in vectorn";
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 listn";
outData << "Sequential Search: SearchItem "
<< searchItem
<< " is not in the listn";
}
感谢您的帮助
您的函数有一个向量的本地副本。它不会影响作为参数传递的向量。您可以通过传递对向量的引用来解决此问题:
void fillArray(istream& io, std::vector<int>& a, int& actualSize)
// ^
juancopanza显示了代码中的错误。我会换一种风格。
将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 vectorn";
outData<<"Search in vectorn";
outputArray(outData, a, a.size(), info);
...
}
从本质上讲,我觉得它更容易阅读。根据Chandler Carruth的这篇演讲,更容易优化。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 矩阵向量乘法(cublasDgemv)返回零
- 一对向量构造函数:初始值设定项列表与显式构造
- 将结构向量排序为子组
- 函数填充向量,但它在某个时刻变为空
- 向量正在调用析构函数,即使在推回的时刻也是如此..为什么?