C++ C++;:为什么创建的向量没有传递到下一组for循环?
我有它,用户定义向量的大小,然后填充向量。然后使用冒泡排序(家庭作业)对向量进行排序。但是,当显示“排序”向量时,其中的数字与原始创建中的数字不同。如何首先创建向量,显示它,然后对其进行排序并显示C++ C++;:为什么创建的向量没有传递到下一组for循环?,c++,sorting,vector,parameter-passing,C++,Sorting,Vector,Parameter Passing,我有它,用户定义向量的大小,然后填充向量。然后使用冒泡排序(家庭作业)对向量进行排序。但是,当显示“排序”向量时,其中的数字与原始创建中的数字不同。如何首先创建向量,显示它,然后对其进行排序并显示 #include <iostream> #include <vector> #include <cmath> #include <numeric> using namespace std; int main() { int n; dou
#include <iostream>
#include <vector>
#include <cmath>
#include <numeric>
using namespace std;
int main()
{
int n;
double average=0.0;
int median = 0;
double size = 0.0;
int i=0;
cout<<"Vector Length?: "<<endl;
cin>>n;
vector<int> data;
srand(time(NULL));
//Filling vector
for (int i=0; i<n; i++)
{
data.push_back(rand()%10+1);
}
for (int i=0; i<data.size(); i++)
{
cout<<"Vector: "<< data[i]<<endl;
}
size = data.size();
//Sorting
void bubbleSort(vector<int> & data);
{
for (int k = 1; k < size; k++)
{
for (int i = 0; i<size -1 - k; i++)
{
if (data[i] > data[i +1])
{
int temp = data[i];
data[i] = data[i + 1];
data[i + 1] = temp;
}
cout<<"Sorted vector: "<< data[i]<<endl;
}
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
int n;
双平均=0.0;
整数中值=0;
双尺寸=0.0;
int i=0;
库特
如果您计划稍后定义函数void bubbleSort(vector&data),则需要在调用它之前声明它\
void bubbleSort(向量和数据);
int main()
{
//这是你的密码
气泡排序(数据);
//这是你的密码
}
您只需要在需要变量之前定义它。如果您声明并且从不使用它,您将收到未使用的变量警告。因此,您可以更好地注释所有这些变量。您可以随时取消注释
//双倍平均值=0.0;
//整数中值=0;
您应该从main()
调用函数bubbleSort()
,如下所示:
bubbleSort(data);
您没有正确使用迭代器索引对vector的元素进行排序。如果您按以下方式更改函数bubbleSort,它将起作用
//排序
void bubbleSort(矢量和数据)
{
int size=data.size();
对于(int k=1;k
确保为您使用的rand()
函数包含所有必要的头文件,例如stdlib.h
去掉所有未使用的变量,如平均值
、中值
和大小
在main
函数之外声明您的bubbleSort
函数,并添加额外的检查代码,以防止在列表中不包含多个元素时进行排序
排序问题与您的以下代码片段有关:
for (int i = 0; i<size -1 - k; i++) { ... }
for(int i=0;ifor(auto i:data){std::您是否声明了一个函数void bubbleSort(vector&data)
在主循环内。您想用它做什么?为什么要在排序循环内打印向量元素?您应该在完成排序后再这样做。Barmar是正确的,您需要将打印移到排序循环外。您当前的程序不打印实际排序的向量。打印的元素数为m甚至可能不是当前设计中向量中的元素数。谢谢大家的帮助。@Phantom我正在尝试创建和使用一个函数。我认为函数可以在int main中创建?因此使用
你不需要使用srand(time(NULL)
?@Aaron不,但是
是创建兰德所必需的()
和srand()
可用。由于您希望在每次执行代码时都随机选择数字,只需在执行rand()
函数之前添加此代码片段:srand(时间(0))
我希望我也能将你的答案标记为最佳答案,这非常有帮助!谢谢!!进一步学习:可以在int main中创建并使用函数吗?还是必须始终按照上面所示的方式使用它们?@Aron正如我在答案中指定的,你不能在另一个函数中定义函数,甚至不能在main()中定义函数。只能从一个函数调用另一个函数。
#include <iostream>
#include <vector>
#include <cmath>
#include <numeric>
using namespace std;
void printVector(vector<int> & data)
{
for (int i=0; i<data.size(); i++)
{
cout<<"Vector: "<< data[i]<<endl;
}
}
//Sorting
void bubbleSort(vector<int> & data);
{
size = data.size();
for (int k = 1; k < size; k++)
{
for (int i = 0; i<size -1 - k; i++)
{
if (data[i] > data[i +1])
{
int temp = data[i];
data[i] = data[i + 1];
data[i + 1] = temp;
}
}
}
}
int main()
{
int n;
double average=0.0;
int median = 0;
double size = 0.0;
int i=0;
cout<<"Vector Length?: "<<endl;
cin>>n;
vector<int> data;
srand(time(NULL));
//Filling vector
for (int i=0; i<n; i++)
{
data.push_back(rand()%10+1);
}
printVector(data);
bubbleSort(data);
printVector(data);
}
for (int i = 0; i<size -1 - k; i++) { ... }
#include <iostream>
#include <stdlib.h>
#include <vector>
#include <cmath>
using namespace std;
void bubbleSort(vector<int>& data)
{
if(data.size() <= 1)
return;
for(int i=1; i<data.size(); i++)
{
for(int j=0; j<data.size()-i; j++)
{
if(data.at(j) > data.at(j+1))
{
int temp = data.at(j+1);
data.at(j+1) = data.at(j);
data.at(j) = temp;
}
}
}
}
int main()
{
int n;
vector<int> data;
cout << "Vector Length?: ";
cin >> n;
// Filling vector
for(int i=0; i<n; i++)
data.push_back(rand()%10+1);
cout << "Vector: ";
for(int i=0; i<data.size(); i++)
cout << data.at(i) << ", ";
// Sorting
bubbleSort(data);
cout << endl << "Sorted Vector: ";
for(int i=0; i<data.size(); i++)
cout << data.at(i) << ", ";
return 0;
}