C++ 在cplusplus中对结构成员排序时获取错误或垃圾
在cplusplus中对结构成员进行排序时获取错误或垃圾 我想使用c/c++中的结构,根据2d数组的第一个值对数组进行排序。我收到垃圾或运行时错误。我无法使用气泡排序对数组进行排序,我不知道如何处理它 这是我的密码C++ 在cplusplus中对结构成员排序时获取错误或垃圾,c++,C++,在cplusplus中对结构成员进行排序时获取错误或垃圾 我想使用c/c++中的结构,根据2d数组的第一个值对数组进行排序。我收到垃圾或运行时错误。我无法使用气泡排序对数组进行排序,我不知道如何处理它 这是我的密码 #include <bits/stdc++.h> using namespace std; struct x { int l[100][3]; }; int main() { int n, k, i, j; cin>>n>
#include <bits/stdc++.h>
using namespace std;
struct x {
int l[100][3];
};
int main()
{
int n, k, i, j;
cin>>n>>k;
struct x o[n], p;
for(i=0;i<n;++i) {
cin>>o[i].l[i][0]>>o[i].l[i][1];
}
for(i=0;i<n;++i) {
for(j=0;j<n-i-1;++j) {
if((o[j].l[j][0])>(o[j+1].l[j+1][0])) {
//cout<<o[j].l[j][0]<<" "<<o[j+1].l[j+1][0]<<"\n";
p = o[j];
o[j] = o[j+1];
o[j+1] = p;
}
}
}
for(i=0;i<n;++i) {
for(j=0;j<2;++j) {
cout<<o[i].l[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
#包括
使用名称空间std;
结构x{
int l[100][3];
};
int main()
{
int n,k,i,j;
cin>>n>>k;
结构xo[n],p;
对于(i=0;i>o[i].l[i][0]>>o[i].l[i][1];
}
对于(i=0;i我将根据我的理解给你一个试用版。如果我错误地理解了你的逻辑,请发一声
首先,我构建了一个包含3个整数的结构'int3',并使用一些实用程序来简化编码,然后在结构'xxx'(您的'x')中构建了一个大小为100的'int3'数组。请注意,'operator[I]`返回第I个元素的'xxx[I].p[0]','operator(I)`返回'int3 p[3]`用于交换。两个运算符都有'rvalue'和'lvalue'版本。
结构:`int3`和`xxx`
#include <iostream>
struct int3
{ int p[3];
int3() = default;
int3(const int3&a) {for (int i=0; i<3; i++) p[i]=a.p[i]; }
int3& operator=(const int3&a) = default;
void print() { std::cout <<"("<< p[0] <<", "<<p[1] <<") "; }
};
struct xxx {
int3 s[100];
int operator[](const int i) const {return s[i].p[0];}
int3 operator()(const int i) const {return s[i];}
int&operator[](const int i) {return s[i].p[0];}
int3&operator()(const int i) {return s[i];}
void print(const int n) {
for(int i=0; i<n; i++) {
std::cout << "No " << i << " = ";
s[i].print();
std::cout << std::endl;
}
}
};
祝你好运!我无法编译你的程序。请阅读,你的数据结构看起来很奇怪。你只使用了这样的o[j].l[j][0])
,即o的索引=l的索引。那么l[100]的作用是什么呢
在结构中x
?由于'o'的索引总是与它的成员'l'相等,我猜您不需要'o'中的数组。此外,程序中没有使用输入数据'k'。
int main()
{
int n, k, i, j;
xxx ox;
int3 q;
std::cout << "input n = ";
std::cin >> n;
while (n>100) {
std::cerr << "Array out of range!\n";
std::cout << "input n = ";
std::cin >> n;
}
for(i=0;i<n;++i) {
std::cout << "a[" << i << "].p[0] ,p[1] = ";
std::cin >> ox.s[i].p[0] >> ox.s[i].p[1];
}
std::cout << "****input list:\n"; ox.print(n);
for(i=0;i<n;++i) {
for(j=0;j<n-i-1;++j) {
if( ox[j] > ox[j+1] ) {
q = ox(j);
ox(j) = ox(j+1);
ox(j+1) = q;
}
}
}
std::cout << "****sorted list:\n"; ox.print(n);
return 0;
}
$ ./a.exe
input n = 5
a[0].p[0] ,p[1] = 5 5
a[1].p[0] ,p[1] = 7 7
a[2].p[0] ,p[1] = 3 3
a[3].p[0] ,p[1] = 8 8
a[4].p[0] ,p[1] = 4 4
****input list:
No 0 = (5, 5)
No 1 = (7, 7)
No 2 = (3, 3)
No 3 = (8, 8)
No 4 = (4, 4)
****sorted list:
No 0 = (3, 3)
No 1 = (4, 4)
No 2 = (5, 5)
No 3 = (7, 7)
No 4 = (8, 8)