Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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++中使用算法库>。我只能找到排序向量的示例,因此我试图通过初始化数组初始化向量。执行时,我遇到了一个分段错误,无法找出我编写的代码中的错误 #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 - Fatal编程技术网

在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())