函数+参考变量 - 编程分配 - C ++

时间:2015-07-17 21:15:58

标签: c++ function reference swap

整天都在努力,无法弄清楚我错过了什么。我不想诉诸于此寻求帮助,但我必须这样做。

练习应该通过引用获取三个int参数,并将它们的值按升序排序,以便第一个参数具有最低值,第二个参数具有中间值,第三个参数具有最高值。

代码编译正常,但数字不符合规定。它一起跳过我的函数,只是直接从main显示变量。

SELECT id, product
FROM mytable AS t1
WHERE id = 0 AND NOT EXISTS (SELECT 1
                             FROM mytable AS t2
                             WHERE t1.product = t2.product AND t2.id <> 0)

3 个答案:

答案 0 :(得分:2)

你的功能过于复杂。这也是错误的,因为至少它没有考虑到变量可以彼此相等。

它可以看起来如下所示,因为它在本演示程序中显示。它使用冒泡排序方法

class Enemy(Scatter):
    intv = NumericProperty(0/10.)
    gravity = NumericProperty(0.01)
    velocity = NumericProperty()
    imgp = StringProperty('enemy.png')
    def __init__(self, **kwargs):
        super(Enemy, self).__init__(**kwargs)
        self.My_Clock = Clock#   declaring the clock for later usage
        self.My_Clock.schedule_interval(self.Update, self.intv)
    def Update(self, *args):
        self.x -= 1
        if self.y > 0:
            self.velocity += self.gravity
            self.y -= self.velocity
        else:
            if self.velocity > 0.5:
                print 'death'

class level(Widget):
    zicie = NumericProperty(10)# the variable containg the life of the player
    zloto = NumericProperty(0)
    e_killed = NumericProperty(0)
    intv1 = NumericProperty(2/1.)
    pu = BooleanProperty(True)
    def __init__(self, **kwargs):
        super(level, self).__init__(**kwargs)
        self.l_Clock = Clock
    def Update(self, *args):# this funktion generates enemys
        pass
        #obj = Root.ids.level
        #obj.add_widget(Enemy(pos=(500,0))) # the widget enemy is added here

Root = Builder.load_string('''
FloatLayout:
    level:
        Enemy:
            pos: 500,0


<Enemy>:
    Image:
        pos: root.pos
        source: 'enemy.png'

''')

程序输出

#include <iostream>

void smallSort( int &valu1, int &valu2, int &valu3 )
{
    if ( valu2 < valu1 )
    {
        int tmp = valu1;
        valu1 = valu2;
        valu2 = tmp;
    }

    if ( valu3 < valu2 )
    {
        int tmp = valu2;
        valu2 = valu3;
        valu3 = tmp;
    }

    if ( valu2 < valu1 )
    {
        int tmp = valu1;
        valu1 = valu2;
        valu2 = tmp;
    }
}

int main()
{
    int a = 2, b = 3, c = 1;

    std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;

    smallSort( a, b, c );

    std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;
}

也代替像这样的代码块

a = 2, b = 3, c = 1
a = 1, b = 2, c = 3

您可以使用标准函数 if ( valu2 < valu1 ) { int tmp = valu1; valu1 = valu2; valu2 = tmp; } 。例如

std::swap

在这种情况下,函数会像

一样
    if ( valu2 < valu1 ) std::swap( valu2, valu1 );

答案 1 :(得分:0)

我认为可以说你已经过度复杂了,但没关系。

我认为如果你一次只比较两个整数,它可能会帮助你压缩代码,这样你就不必硬编码那么多的逻辑。 我快速谷歌搜索源代码,发现:https://codereview.stackexchange.com/questions/64758/sort-three-input-values-by-order 请务必查看该帖子上的评论,因为他们也应该帮助您。

此外,它非常容易找到谷歌的源代码,它会帮助你很多,特别是当你还在学习的时候!

答案 2 :(得分:0)

C ++ 11替代

#include <iostream>
#include <array>
#include <algorithm>
using namespace std;

int main() {
    array<int, 3> arr = { 100, 25, 20 };
    sort(arr.begin(), arr.end());
    for (int & i : arr) cout << i << endl;
}

<强>输出

20
25
100