矢量作为函数中的参数

时间:2014-07-13 02:45:02

标签: c++ vector

我有这样的代码: 请原谅我的波兰名字,我希望这不是问题。如果你想,我可以改变它们。

#include <iostream>
#include <vector>
#include <math.h>

using namespace std;

//a few unimportant functions

void zamianaNaDziesietny(int podstawa, int liczba, int reszta[])
{
    vector < int > cyfra;
    cout <<"\n";

    for(int a = reszta.size(); a > 0; a--)
    {
        cyfra.push_back(reszta[a - 1] * pow(podstawa, a - 1));
    }

    for(int a = 1; a < cyfra.size(); a++)
    {
        cyfra[0] += cyfra[a];
    }

    cout << cyfra[0];
}

void zamianaNaDziesietny(int podstawa, int liczba, int reszta[])
{
    vector < int > cyfra;
    cout <<"\n";

    for(int a = reszta.size(); a > 0; a--) //request for member 'size' in 'reszta', which is of non-class type 'int*'
    {
        cyfra.push_back(reszta[a - 1] * pow(podstawa, a - 1));
    }

    for(int a = 1; a < cyfra.size(); a++)
    {
        cyfra[0] += cyfra[a];
    }

    cout << cyfra[0];
}

//another unimportant part of code

int main()
{
     //unimportant stuff

    zamianaZDziesietnego(podstawa, liczba);
    zamianaNaDziesietny(podstawa, liczba, reszta);

    return 0;
}

我不知道如何在函数“zamiananaDziesietny”中使用vector'reszta'作为参数。 我应该输入什么才能让这个程序编译?

我收到2个错误: 其中之一是: 'reszta'未在此范围内声明

这是一个数组......好吧,矢量是一种数组......我想......我是菜鸟,所以我总是错的。

我可以在main中处理这个向量,添加“cout&lt;&lt; reszta [0];” (只是在屏幕上写一个这个向量的元素)在main中,只是在这两个函数的导入之间运行良好。但我认为这个问题可以通过在main中设置这个向量来解决,然后它也将作为zamianaZDziesietnego()函数中的参数,但是......

我不知道如何在函数中使用向量作为参数。

我得到的第二个错误是:  请求'reszta'中的成员'size',这是非类型'int *' 它在第32行。

所以这是我的问题。 我试过用几种不同的方式输入这个参数。

当我尝试时: void zamianaNaDziesietny(int podstawa,int liczba,vector reszta [])

第二个错误更改为: 请求'reszta'中的成员'size',它是指针类型'std :: vector *'(也许你打算使用' - &gt;'?)|

并且还在下面几行出现了一个新错误:

'*中没有匹配'operator *'(reszta +((((sizetype)a)+ -1u)* 12u))* pow((double)podstawa,(double)(a + -1)) “|

嗯,我是一个非常大的菜鸟,我不知道如何解决这个问题。有人可以帮忙吗?

顺便说一句,如果有人有兴趣 - 我正在制作一个程序,将线性计数转换为十进制,反之亦然。

2 个答案:

答案 0 :(得分:3)

只需声明这样的论点:

void zamianaNaDziesietny(int podstawa, int liczba, std::vector<int> reszta)
{
    vector < int > cyfra;
    cout <<"\n";

    for(int a = reszta.size(); a > 0; a--)
    {
        cyfra.push_back(reszta[a - 1] * pow(podstawa, a - 1));
    }

    for(int a = 1; a < cyfra.size(); a++)
    {
        cyfra[0] += cyfra[a];
    }

     cout << cyfra[0];
}

或者更好的是,通过引用传递向量以避免被复制:

void zamianaNaDziesietny(int podstawa, int liczba, std::vector<int>& reszta)
{
    vector < int > cyfra;
    cout <<"\n";

    for(int a = reszta.size(); a > 0; a--)
    {
        cyfra.push_back(reszta[a - 1] * pow(podstawa, a - 1));
    }

    for(int a = 1; a < cyfra.size(); a++)
    {
        cyfra[0] += cyfra[a];
    }

     cout << cyfra[0];
}

你所做的是使用一个int数组(int reszta[])作为参数而不是一个向量 - 它们是不同的类型。

答案 1 :(得分:1)

向量与数组不同,因为向量是类,并且可以有调用它们的方法(例如.size()。数组来自c,它们实际上只是内存中的指针。如上所述传入引用将是传递向量的最佳方法,但请务必小心修改。