使用来自参考指针的信息来填充向量
Using information from a reference pointer to fill a vector
我的目标是构建一个接受整数列表并将它们相互比较的函数。基本上,如果当前位置前后位置的数字匹配,则当前数字变为(或保持)0。否则,它变为(或保持)1。
代码必须假定在第一个值之前和最后一个值之后有一个零,这就是为什么在 for 循环之外有那些 "if-else" 语句的原因。更新必须一次全部发生,这就是为什么有第二个向量来存储主向量 (houses
) 将在最后设置的新值 (x
)。
我的计划是获取传递给函数的值并用它们填充一个向量。但是,我以前从未见过这样做(即使我距离学士学位还不到 3 个月……谢谢 Strayer)。
如何用存储在引用内存位置中的列表填充向量?
注:
我使用 cout << *states;
作为一种方式来尝试查看代码在我引用该位置时看到的内容,当我意识到它不起作用时,但全部 returns 是一个整数。有人能帮我理解这是如何工作的,以及如何用值填充向量吗?
此外,我知道使用 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;
}
My goal is to build a function that takes a list of integers and
compares them to each other.
阅读你的代码,我了解到“整数列表”实际上是一个作为指针传递的数组,那几天是数组中整数的数量:
vector<int> cellCompete(int* states, int days)
不幸的是,在您的循环中,您总是附加到向量 *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
吗?
有了这个提示,我把剩下的练习留给你,以促进你的学习体验;-)
我的目标是构建一个接受整数列表并将它们相互比较的函数。基本上,如果当前位置前后位置的数字匹配,则当前数字变为(或保持)0。否则,它变为(或保持)1。
代码必须假定在第一个值之前和最后一个值之后有一个零,这就是为什么在 for 循环之外有那些 "if-else" 语句的原因。更新必须一次全部发生,这就是为什么有第二个向量来存储主向量 (houses
) 将在最后设置的新值 (x
)。
我的计划是获取传递给函数的值并用它们填充一个向量。但是,我以前从未见过这样做(即使我距离学士学位还不到 3 个月……谢谢 Strayer)。
如何用存储在引用内存位置中的列表填充向量?
注:
我使用
cout << *states;
作为一种方式来尝试查看代码在我引用该位置时看到的内容,当我意识到它不起作用时,但全部 returns 是一个整数。有人能帮我理解这是如何工作的,以及如何用值填充向量吗?此外,我知道使用
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;
}
My goal is to build a function that takes a list of integers and compares them to each other.
阅读你的代码,我了解到“整数列表”实际上是一个作为指针传递的数组,那几天是数组中整数的数量:
vector<int> cellCompete(int* states, int days)
不幸的是,在您的循环中,您总是附加到向量 *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
吗?
有了这个提示,我把剩下的练习留给你,以促进你的学习体验;-)