我正在尝试对具有动态确定大小的数组使用冒泡排序方法。这是代码:
#include <iostream>
using namespace std;
int main()
{
int n;
cout<<"Enter n";
cin>>n;
int arr[n],swap;
cout<<"Enter number"<<endl;
cin>>arr[n];
for(int i=0;i<n-1;i++)
for(int j=0;i<n-i-1;j++)
if(arr[j]>arr[j+1])
{
swap=arr[j];
arr[j]=arr[j+1];
arr[j+1]=swap;
}
for(int k=0;k<n;k++)
cout<<"arr["<<k<<"]="<<arr[k]<<endl;
return 0;
}
当我以这种方式定义数组的元素时,程序可以工作:
const n=5;
int arr[n]={1,2,3,4,5)
但我需要从键盘输入数组(n)及其元素的大小。但是当我运行我的代码时,程序在输入第一个数字后崩溃了。有办法解决吗?
答案 0 :(得分:3)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n, swap, temp;
vector<int> arr;
cout<<"Enter n";
cin>>n;
// Loop and accept the n values.
// You may need to take care of the new line.
for(int i = 0; i < n; ++i)
{
cout << "Enter a number : ";
cin >> temp;
arr.push_back(temp);
}
for(int i=0;i<n-1;i++)
for(int j=0;j<n-i-1;j++)
if(arr[j]>arr[j+1])
{
swap=arr[j];
arr[j]=arr[j+1];
arr[j+1]=swap;
}
for(int k=0;k<n;k++)
cout<<"arr["<<k<<"]="<<arr[k]<<endl;
return 0;
}
注意如何使用循环从用户中提取n
值。同样使用std::vector
可以使您无法使用new
和delete
为运行时大小的数组编写代码。
此外,您的内部循环正在检查i<n-i-1
并递增j
,而j<n-i-1
应该j
,否则INT_MAX
将无限增加,直到cond = {'notified':'100','token':'123','usage':'kart_user'}
sql = "UPDATE {} set notified = %(notified)s where token = %(token)s".format(cond['usage'])
result = self.cur.execute(sql,cond)
result = self.dbconn.commit()
return res
。
答案 1 :(得分:3)
关键词是动态分配。在C中,函数是malloc。在Cpp中,它可以是new和delete。虽然矢量可以很好地工作,但它只是STL的一种方法。请注意,我的代码可能存在安全问题。
#include <iostream>
using namespace std;
int main()
{
int n,temp;
cout<<"Enter n:";
cin>>n;
//dynamic allocation
int *arr=new int[n];
cout<<"Enter number."<<endl;
for(int i=0;i<n;i++){
cin>>arr[i];
}
//bubble sort
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(arr[i]>arr[j]){
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
//output the array
for(int i=0;i<n;i++){
cout<<"arr["<<i<<"]="<<arr[i]<<endl;
}
delete [] arr;
return 0;
}
答案 2 :(得分:1)
你不能像这样采用整数数组,你需要运行一个循环。你可以像这样$(function() {
location.href = "#page1"
var goToNextPage = null;
function updatePage(event) {
console.log(event)
var currentPage = Number(location.hash.slice(-1));
// if `currentPage` is less than 4
if (currentPage !== 4) {
goToNextPage = setTimeout(function() {
if ((currentPage + 1) <= 4) {
// set `location.href` to `#page` + `currentPage` + `1`
location.href = "#page" + (currentPage + 1);
console.log(location.hash);
// reset event handlers
$(document).one("mousemove keypress", updatePage);
}
}, 3000);
} else {
clearTimeout(goToNextPage)
}
}
$(document).one("mousemove keypress", updatePage);
});
。冒泡排序逻辑中也存在很多错误,请尝试下面的代码片段。它应该工作正常。您需要为string
arr
包括:int n,r,swap,i,*arr;
cout<<"Enter n\n";
cin>>n;
arr = (int *)malloc((n)*sizeof(int));
cout<<"Enter numbers\n"<<n<<endl;
for(i=0;i<n;i++)
{
cin>>arr[i];
}
for(i=0;i<n;i++)
{
for(int j=0;j<n-1;j++)//You're checking for i. you need to check for j
{
if(arr[j+1]<arr[j])
{
swap=arr[j];
arr[j]=arr[j+1];
arr[j+1]=swap;
}
}
}
//now print your arr
答案 3 :(得分:0)
正如我在评论中所提到的,你不能用C ++动态声明数组的大小(如果你愿意,可以使用std::vector
)。
然后你可以这样做:
....
cin >> n;
vector<int> arr(n); // reserves space for `n` integers in the memory
....