将向量作为函数参数传递

时间:2012-01-17 19:01:40

标签: c++ debugging vector

static int sum = 0;
static int loop = 0;

void put_into_vector( ifstream& ifs, vector<int>& v )
{

    // String to store our file input string
    string s;

    // Extracts characters from the input sequence until a delimited is found
    getline( ifs, s );

    // Input string stream class to modify the strings
    istringstream iss( s );

    // Skip all the white spaces. 
    iss >> skipws;

    // Function to check if stream's error flags (eofbit, failbit and badbit) are set.
    if(iss.good())
    {
        // Copies elements within the specified range to the container specified.
        copy( istream_iterator<int>( iss ), istream_iterator<int>(),back_inserter(v));
    }
}

void get_value(vector<int>& v, int start, int end)
{
    while(loop < 4)
    {
        if(start == end)
        {
            sum = sum + v[start];
            loop++;
            get_value(v,start,end+1);
        }
        if(v[start] > v[end])
        {
            sum = sum + v[start];
            loop++;
            get_value(v,start,end);
        }
        if(v[start] < v[end])
        {
            sum = sum + v[end];
            loop++;
            get_value(v,end,end+1);
        }
    }   
}

int main()
{    
    vector<int> triangle_array[4];
    ifstream ifs("numbers.txt");

    for(int i = 0; i < 4; i++)
    {
        put_into_vector(ifs, triangle_array[i]);
    }

    int row = 0;
    get_value(triangle_array[row], 0, 0);
    return 0;
}

我正在尝试让我的代码运行。代码读取文本文件,如下所示:

5

8 1

4 8 3

0 7 12 4

当我调用get_value函数并传入参数时,它指向第一个向量 这是v [0] = 5.在第一个条件中,当start == end时,我更新了max的值但是在这之后我想再次调用相同的函数但是传递下一个向量即。 V [1] 其中有“8,1”。我不能这样做,因为它在写v [1]或其中任何内容时给出了错误。

错误是:error C2664: 'get_value' : cannot convert parameter 1 from 'int' to 'std::vector<_Ty> &'

您是否知道我可以通过传递指向下一行的vec来递归调用它,即vec[0]然后vec[1],vec[2]vec[3]

2 个答案:

答案 0 :(得分:0)

我对你想做什么感到有点困惑,但我猜它是这样的:

//you have
void get_value(vector<int>& v, int start, int end);

//you want
void get_value(vector<int>* v, const int curVectorIdx, const int maxVectors, int start, int end)
{
    int nextVectorIdx = curVectorIdx + 1;
    if(nextVectorIdx < maxVectors) {
        vector<int>* nextVector = v + nextVectorIdx;
        get_value(nextVector, nextVectorIdx, maxVectors, nextVector->begin(), nextVector->end());
    }
}

答案 1 :(得分:0)

我认为你需要改变

get_value(triangle_array[row], 0, 0); this line

get_value(triangle_array, 0, 0);