Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试交换向量中的两个元素时,断言失败_C++_Vector - Fatal编程技术网

C++ 尝试交换向量中的两个元素时,断言失败

C++ 尝试交换向量中的两个元素时,断言失败,c++,vector,C++,Vector,我有以下代码: #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;

我有以下代码:

#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;
}

我看到的一个问题是,您没有任何检查来确保您没有访问超出边界的向量

改变

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

for(size_t k=i;kstrVec[k+1][j];k++)
strVec[k].swap(strVec[k+1]);
由于您正在访问
strVec[k+1]
k
必须小于
size-1


如果
size
0
,则会出现问题。您可以通过使用
int
for
size
k
而不是
size\u t

来解决这个问题,为什么不使用
std:sort()
?@HappyCoder这实际上非常有用,尽管我想知道为什么会遇到这个错误。
for(size\t j=4;j>=0;j--)
这将永远不会终止,但不会解决问题:/@Larrimus,你能发布你看到问题所在的最小输入吗?这里有一个指向我输入文件的dropbox链接:文件是否太大,无法将其内容添加到你的帖子中?如果没有,请将其内容添加到帖子中。如果不是,请尝试创建仍然会产生问题的文件的最低版本。我们不喜欢问答中包含数据的重要内容的外部链接。
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]);