c++ - 使用来自引用指针的信息来填充向量
问题描述
我的目标是构建一个接受整数列表并将它们相互比较的函数。基本上,如果当前位置之前和之后位置的数字匹配,则当前数字变为(或保持)0。否则,它变为(或保持)1。
代码必须假设在第一个值之前和最后一个值之后都有一个零,这就是为什么在 for 循环之外有那些“if-else”语句的原因。更新必须同时发生,这就是为什么有第二个向量来存储x
主向量 ( houses
) 将在最后设置的新值 ( )。
我的计划是获取传递给函数的值并用它们填充一个向量。但是,我以前从未见过这样做(即使我距离学士学位还不到 3 个月......谢谢你,斯特雷耶)。
如何使用存储在引用的内存位置中的列表填充向量?
笔记:
我用
cout << *states;
一种方法来尝试查看当我引用该位置时代码看到了什么,当我意识到它不起作用时,它返回的只是一个整数。有人可以帮我理解这是如何工作的,以及如何用这些值填充向量吗?push_back()
另外,我知道使用它而不是该方法会更有效.at(i)=
,但我只是尽我所能找出问题所在,并在我放弃时结束了。)
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;
}
解决方案
我的目标是构建一个接受整数列表并将它们相互比较的函数。
阅读您的代码,我了解到“整数列表”实际上是一个作为指针传递的数组,而天数是数组中的整数数:
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
吗?
有了这个提示,我把剩下的练习留给你,以促进你的学习体验;-)
推荐阅读
- node.js - 在通过 POST 方法提交我的表单时,它不会发布路由,而是会发送到我的获取请求
- javascript - 使用 TLS 的 Redis createClient。为什么它允许不通过证书?
- css - 在 CSS Grid 中,如何删除第 1 列与第 2 列的匹配高度?
- delphi - 下载大文件时出现 Indy TIdFTP“内存不足”错误
- javascript - 如何为 MaterialUI 组件中使用的“颜色”道具使用主题颜色
- android - 单击文本视图时根据文本视图形状更改文本视图的背景颜色
- c# - LINQ:如何选择唯一行:具有多列的 max(id)?
- javascript - 如何将图表添加到 Firebase?
- php - 父类中的私有属性可以通过 PHP 中的子类的实例进行访问和重新分配,但受保护的不能
- spring - Spring Boot as API Rest 不会反序列化整个对象