gpt4 book ai didi

c++ - 尝试交换 vector 中的两个元素时断言失败

转载 作者:行者123 更新时间:2023-11-30 03:45:37 25 4
gpt4 key购买 nike

我有这个代码:

#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <stdint.h>

std::vector<std::string> readIn(const std::string& fileName)
{
std::vector<std::string> strVec;
std::ifstream file(fileName);
std::string line;
while (!file.eof())
{
file >> line;
strVec.push_back(line);
}
file.close();
return strVec;
}
void sortVector(std::vector<std::string>& strVec)
{
size_t size = strVec.size();
for (size_t j = 4; j >= 0; j--)
{
for (size_t i = 0; i < size; i++)
{
for (size_t k = i; strVec[k][j] > strVec[k + 1][j]; k++)
strVec[k].swap(strVec[k+1]); //CRASHES HERE
}
}
}
int main()
{
std::string fileName = "input.txt";
std::vector<std::string> strVec = readIn(fileName);
size_t size = strVec.size();
std::cout << "Words in file:" << std::endl
<< "before sorting:";
for (size_t i = 0; i < size; i++)
std::cout << strVec[i] << " ";
sortVector(strVec);
std::cout << std::endl << std::endl << "after sorting:" << std::endl;
for (size_t i = 0; i < size; i++)
std::cout << strVec[i] << std::endl;
return 0;
}

我遇到的问题是对我的 vector 字符串进行排序。更具体地说,该程序不喜欢我的 sortVector() 函数中的 strVec[k].swap(strVec[k+1]);。调试器还说我的 vector 被正确填充:
enter image description here
所以 readIn() 似乎 不是问题所在(因为程序在 sortVector() 中中断),但我还是发布了它.

也许我不应该这么快就放弃,但我用谷歌搜索了这个并阅读了所有关于 vector (和 vector 中的字符串)的资料,但我仍然感到困惑。非常感谢你们能提供的任何反馈。

编辑:这是我的 input.txt 文件的内容:

This is a test input file for CS250's CS161 programming pre-requisite assignment

This file contains a number of words and lines, but nothing terribly important.

最佳答案

我看到的一个问题是您没有任何检查来确保您没有越界访问 vector 。

改变

for (size_t k = i; strVec[k][j] > strVec[k + 1][j]; k++)
strVec[k].swap(strVec[k+1]);

for (size_t k = i; k < size-1 && strVec[k][j] > strVec[k + 1][j]; k++)
strVec[k].swap(strVec[k+1]);

由于您正在访问 strVec[k+1]k 必须小于 size-1

如果 size0,则会导致问题。您可以通过对 sizek 使用 int 而不是 size_t 来解决这个问题。

关于c++ - 尝试交换 vector 中的两个元素时断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34670233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com