在C+中通过初始化数组初始化向量时出现分段错误+; 我想在C++中使用算法库>。我只能找到排序向量的示例,因此我试图通过初始化数组初始化向量。执行时,我遇到了一个分段错误,无法找出我编写的代码中的错误 #include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { int n,k,packet[1000],min=0; scanf("%d",&n); scanf("%d",&k); for (int i = 0; i < n; ++i) { scanf("%d",&packet[i]); cout<<i<<endl; } cout<<"debug"; vector<int> packets(packet,packet+n); vector<int>::iterator start,stop; sort(packets.begin(),packets.begin()+n); min=*(packets.begin())- *(packets.end()); cout<<min; for (vector<int>::iterator it=packets.begin(); it!=packets.end()-k; ++it) { printf("%d ",*it ); if((*(it+k) - *it)<min) { start=it; stop=it+k; } } printf("%d\n",*stop- *start ); return 0; #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main(){ int n,k,数据包[1000],min=0; scanf(“%d”和“&n”); scanf(“%d”和“&k”); 对于(int i=0;i
在C+中通过初始化数组初始化向量时出现分段错误+; 我想在C++中使用算法库>。我只能找到排序向量的示例,因此我试图通过初始化数组初始化向量。执行时,我遇到了一个分段错误,无法找出我编写的代码中的错误 #include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { int n,k,packet[1000],min=0; scanf("%d",&n); scanf("%d",&k); for (int i = 0; i < n; ++i) { scanf("%d",&packet[i]); cout<<i<<endl; } cout<<"debug"; vector<int> packets(packet,packet+n); vector<int>::iterator start,stop; sort(packets.begin(),packets.begin()+n); min=*(packets.begin())- *(packets.end()); cout<<min; for (vector<int>::iterator it=packets.begin(); it!=packets.end()-k; ++it) { printf("%d ",*it ); if((*(it+k) - *it)<min) { start=it; stop=it+k; } } printf("%d\n",*stop- *start ); return 0; #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main(){ int n,k,数据包[1000],min=0; scanf(“%d”和“&n”); scanf(“%d”和“&k”); 对于(int i=0;i,c++,arrays,vector,stl-algorithm,C++,Arrays,Vector,Stl Algorithm,packets.end() 试图解除防护会导致未定义的行为 packets.end() 试图解除防护会导致未定义的行为 packets.end() 试图解除防护会导致未定义的行为 packets.end() 试图取消阻止它会导致未定义的行为。注释解释说,可以对数组使用排序(如果您查看,您会发现,sort使用两个参数:-RandomIt必须满足ValueSwappable和RandomAccessIterator的要求。。普通指针满足此要求) 在您的示例中,发生segfault是因为您尝试取消引用
packets.end()
试图解除防护会导致未定义的行为
packets.end()
试图解除防护会导致未定义的行为
packets.end()
试图解除防护会导致未定义的行为
packets.end()
试图取消阻止它会导致未定义的行为。注释解释说,可以对数组使用排序(如果您查看,您会发现,sort
使用两个参数:-RandomIt必须满足ValueSwappable和RandomAccessIterator的要求。
。普通指针满足此要求)
在您的示例中,发生segfault是因为您尝试取消引用一个有效但不可引用的迭代器(在:min=*(packets.begin())-*(packets.end())中由'end()'返回的迭代器)基本上,它返回一个迭代器,该迭代器指向向量的最后一个元素之后的。如果你想得到最后一个元素的迭代器,你可以使用rbegin()
,但当然你需要先确保向量不是空的
通过在调试器下运行代码,您可以很容易地看到这一点,您会发现分段错误与调用sort
无关。注释解释说,可以对数组使用sort(如果您查看,您将看到,sort
采用两个参数:-RandomIt必须满足ValueSwappable和RandomAccessIterator的要求。
。普通指针满足此要求)
在您的示例中,发生segfault是因为您尝试取消引用一个有效但不可引用的迭代器(在:min=*(packets.begin())-*(packets.end())中由'end()'返回的迭代器)基本上,它返回一个迭代器,该迭代器指向向量的最后一个元素之后的。如果你想得到最后一个元素的迭代器,你可以使用rbegin()
,但当然你需要先确保向量不是空的
通过在调试器下运行代码,您可以很容易地看到这一点,您会发现分段错误与调用sort
无关。注释解释说,可以对数组使用sort(如果您查看,您将看到,sort
采用两个参数:-RandomIt必须满足ValueSwappable和RandomAccessIterator的要求。
。普通指针满足此要求)
在您的示例中,发生segfault是因为您尝试取消引用一个有效但不可引用的迭代器(在:min=*(packets.begin())-*(packets.end())中由'end()'返回的迭代器)基本上,它返回一个迭代器,该迭代器指向向量的最后一个元素之后的。如果你想得到最后一个元素的迭代器,你可以使用rbegin()
,但当然你需要先确保向量不是空的
通过在调试器下运行代码,您可以很容易地看到这一点,您会发现分段错误与调用sort
无关。注释解释说,可以对数组使用sort(如果您查看,您将看到,sort
采用两个参数:-RandomIt必须满足ValueSwappable和RandomAccessIterator的要求。
。普通指针满足此要求)
在您的示例中,发生segfault是因为您尝试取消引用一个有效但不可引用的迭代器(在:min=*(packets.begin())-*(packets.end())中由'end()'返回的迭代器)基本上,它返回一个迭代器,该迭代器指向向量的最后一个元素之后的。如果你想得到最后一个元素的迭代器,你可以使用rbegin()
,但当然你需要先确保向量不是空的
通过在调试器下运行代码,您可以很容易地看到这一点,您会发现分段错误与调用sort
无关。您可以对数组使用std::sort
。初始化向量所用的迭代器与传递给算法的迭代器相同。如何获得分段fa编译时的ult?对于排序,请使用“排序(packets.begin(),packets.end());”如果这就是你的意思。如果你在编译时遇到一个segfault,你有一个编译器错误,那么你需要发布:哪个编译器,哪个操作系统,什么命令行参数,以及编译过程中的所有编译器输出。我有一种强烈的感觉,那就是你可以对数组使用std::sort
。同样的iter初始化向量所用的运算符就是传递给算法的运算符。编译时如何得到分段错误?对于排序,请使用“sort(packets.begin(),packets.end());”如果这是您的意思。如果您是ge
*(packets.end())