繁体   English   中英

placeNumbers应该返回数字的顺序,以便满足布尔值向量中编码的条件

[英]placeNumbers should return an ordering of the numbers such that the conditions encoded in the vector of Boolean values are met

placeNumbers是一个函数,应将n个整数的向量和n-1个布尔值的向量作为输入,并返回n个整数的向量。 placeNumbers应该返回数字的顺序,以便满足布尔值向量中编码的条件。 如果布尔向量的左边的数字小于右边的数字,则布尔向量中的值将为true,否则为false。 可以假设向量将按升序排列。

我在最后的tempNumbers [i + 1] = small.pop();时遇到错误。 它说“不能将类型为“ void”的值分配给类型为“ int”的实体”

我不知道如何解决此错误,而且我不确定我的代码是否可以根据家庭作业正常工作。 这是我使用C ++的第一门课程,所以如果我做一些愚蠢的事情,请不要对我大喊大叫:(

#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include "csce310assgnmnt02prt01.h"
#include <numeric>

using namespace std;

vector<int> placeNumbers(vector<int> numbers, vector<bool> signs){
vector<int> tempNumbers;
vector <int> sortedNumbers;
std::sort(numbers.begin(), numbers.end(), sortedNumbers);

int nbigger = accumulate(signs.begin(), signs.end(), 0);

int startIndex = sizeof(numbers) - (nbigger + 1);

std::stack<int>smaller;
for (int i = 0; i < startIndex; i++){
    smaller.push(sortedNumbers[i]);
}

std::queue<int>bigger;
for (int i = startIndex + 1; i <sizeof(sortedNumbers); i++){
    bigger.push(sortedNumbers[i]);
}


for (int i = 0; i < sizeof(signs); i++){
    if (signs[i] == 0){
        tempNumbers[i + 1] = smaller.pop();

    }
    if (signs[i] == 1){
        tempNumbers[i + 1] = bigger.pop();
    }
    numbers = tempNumbers;
}
return numbers;
}

pop()不返回值,它只是删除栈顶并返回void 您需要调用top()获取值,然后调用pop()删除它。 在这里 ,你可以阅读的文档top()这里的文档pop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM