gpt4 book ai didi

c++ - 使用自动循环时代码崩溃

转载 作者:行者123 更新时间:2023-11-28 01:38:47 25 4
gpt4 key购买 nike

我正在使用交换函数对 vector 进行排序。当我使用循环时:

for (int i = 0; i < vec.size(); i++)

代码运行良好,但当我使用时: for (auto const &i:vec)

它崩溃了!

Error in ./run': free(): invalid next size (fast): 0x0000000001df0c20

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <vector>
#include <array>

template <class T>
void myswap(T &a,
T &b)
{
T temp = a;
a = b;
b = temp;
}


int main() {

const int N = 5;
std::vector<int> vec = {112,32,11,4,7};

std::cout << "\nInit\n";
for (const auto &i:vec)
{
std::cout << i << "\t";
}


int j;
for (auto const &i:vec)
//for (int i = 0; i < vec.size(); i++)
{
j = i;
while (j > 0 && vec[j] < vec[j-1])
{
myswap(vec[j], vec[j-1]);
j--;
}
}


std::cout << "\n\nFinal\n";
for (const auto &i:vec)
{
std::cout << i << "\t";
}

std::cout << "\n";
return 0;
}

最佳答案

已经在问题的评论中回答了(基于范围的循环遍历不是索引),但为了说明,试试这个:

std::vector<std::vector<int>> v;
int j;
for(auto const& i : v)
{
j = v;
}

您很快就会发现这段代码无法编译——一个好的编译器会向您显示类似这样的错误(来自 GCC):

error: cannot convert 'std::vector<std::vector<int> >' to 'int' in assignment

您现在可以做的是:

std::vector<std::vector<int>> v;
for(auto const& i : v)
{
std::vector<int> const& vv = v; // assign a reference
std::vector<int> vvv = v; // make a COPY(!)
}

非常不言自明,不是吗?

关于c++ - 使用自动循环时代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48228137/

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