首页 > 解决方案 > 使用来自引用指针的信息来填充向量

问题描述

我的目标是构建一个接受整数列表并将它们相互比较的函数。基本上,如果当前位置之前和之后位置的数字匹配,则当前数字变为(或保持)0。否则,它变为(或保持)1。

代码必须假设在第一个值之前和最后一个值之后都有一个零,这就是为什么在 for 循环之外有那些“if-else”语句的原因。更新必须同时发生,这就是为什么有第二个向量来存储x主向量 ( houses) 将在最后设置的新值 ( )。

我的计划是获取传递给函数的值并用它们填充一个向量。但是,我以前从未见过这样做(即使我距离学士学位还不到 3 个月......谢谢你,斯特雷耶)。

如何使用存储在引用的内存位置中的列表填充向量?

笔记:

vector<int> cellCompete(int* states, int days) 
{
    vector<int> houses;
    vector<int> x;
    x.resize(8);
    cout << *states;
    for (unsigned int i = 0; i<8; i++){
        houses.push_back(*states);
        cout << houses.at(i) << endl;
    }
    for (unsigned int i = 0; i<days; ++i) {        
        if (houses.at(1)==0) {
            x.at(0)=0;
        }
        else{
            x.at(0)=1;
        }
        for (unsigned int y=1; y<7; y++){
            if (houses.at(y-1)==houses.at(y+1)){
                x.at(y)=0;
            }
            else{
                x.at(y)=1;
            }
        }
        if (houses.at(6)==0){
            x.at(7)=0;
        }
        else{
            x.at(7)=1;
        }
        houses=x;        
    }
    return houses;
}

标签: c++functionvectorfill

解决方案


我的目标是构建一个接受整数列表并将它们相互比较的函数。

阅读您的代码,我了解到“整数列表”实际上是一个作为指针传递的数组,而天数是数组中的整数数:

vector<int> cellCompete(int* states, int days)  

不幸的是,在您的循环中,您总是附加到 vector *state,在您的情况下,这将是整数的第一个数组。如果指针指向一个数组,您可以将其递增以指向下一个元素,或者像对数组所做的那样对其进行索引:

vector<int> houses;
vector<int> x(8);   // you can get the right size at construction
for (unsigned int i = 0; i<8; i++){
    houses.push_back(states[i]);
    cout << houses[i] << endl;
}

我无法回答的问题:是否有理由使用硬编码大小8?不应该是days吗?

有了这个提示,我把剩下的练习留给你,以促进你的学习体验;-)


推荐阅读