c++ - 使用文件流插入数据时,Vector 内的值不详
问题描述
我有一个模板类,其中我有一个函数,它应该读取文本文件的内容并创建一个对象,该对象被推入自己实现的向量类中。我可以编译代码,但我收到一个关于向量中第 0 个元素的非常大的数字的错误。(这是为错误处理提供的脚本生成的错误,不是任何 c++ 编译器错误。)
代码如下所示:
bool FileReading(const std::string &nameOfFile)
{
std::ifstream readFileObj(nameOfFile);
if (readFileObj.is_open())
{
T input;
readFileObj >> input;
PushBack(input);
readFileObj.close();
return true;
}
return false;
}
变量T 输入是一个模板变量,函数PushBack是一个将对象推入向量的函数。(不是 std push_back 函数)
我错过了一些明显的东西吗?关于流如何工作的一些基本知识?
这是我的 PushBack 函数:
void PushBack(const T &element)
{
if (currentElementCount == maximumCapacity)
{
T *tempArray = new T[maximumCapacity * 2];
for (unsigned int i = 0; i < maximumCapacity; ++i)
tempArray[i] = normalArray[i];
delete[] normalArray;
maximumCapacity *= 2;
normalArray = tempArray;
}
normalArray[currentElementCount] = element;
currentElementCount += 1;
}
解决方案
我不确定我是否正确掌握了执行这些操作的上下文,但我想到了一些可能会有所帮助的想法:
您在函数中的 for 循环
PushBack
首先将 的值初始化i
为 0,但随后您的前进步骤是++i
. 这个预增量将i
上升到 1 的值,然后只有在此之后才会执行 for 循环的主体。我怀疑这可能意味着您完全跳过将任何内容放入索引 0 并且稍后当您尝试访问(无效)对象时可能会遇到麻烦。也许你会更好地将这个位更改为i++
?这个模板类型 T 是否可以从单个项目中读取?我看到你有
T input; readFileObj >> input;
,但是你需要一个项目 T 还是你可能需要读一些东西来创建一个将被推入你的向量的 T ?如果是这种情况,问题可能就像输入流未对齐一样简单,我可能会看到一些关于无效对象的错误是有意义的。
推荐阅读
- r - 条形图的频率作为独立列表
- bash - 将进程替换与此处的字符串相结合
- r - 如何在R中循环使用多个数据库
- javascript - 验证提交按钮上没有附加文件上传
- apache-flink - Flink 将 TTL 添加到现有值状态
- c# - 使用语音识别时 C# 不必要的输入
- ruby-on-rails - 使用 Rspec 使用错误数量的参数(给定 2,预期为 1)在 get :index 中测试失败
- spring - 如何在 @Validated @Service 注释的服务方法中自动装配 bean
- mysql - 当其中一个字段包含逗号分隔数字时,如何在 mySQL 中使用 GROUP_CONCAT?
- python - 如何在 yocto 构建期间从 bitbake bb 文件执行 python 脚本