晚上好,伙计们。
我目前在从阵列中提取配对号时遇到了困难。我有以下代码:
#include <iostream>
using namespace std;
int *paire(int *d, int length) {
int counter = 0;
int position = 0;
for (int i=0; i<length; i++) {
if (d[i] % 2 ==0)
counter++;
}
int *k = new int[counter];
for (int i=0; i<length; i++) {
if (d[i] % 2 ==0) {
k[position] = d[i];
position++;
}
}
return k;
}
int main() {
int b[8] = {1,2,3,4,5,6,7,8};
int *array1 = paire(b,8);
for (int i=0; i<5; i++) { // how can I point here to the counter in paire() ?
cout<<array1[i];
}
delete[] array1;
return 0;
}
所以我认为我在函数paire
中初始化新数组时已经做对了,但是我很难遍历数组。
P.S。我是大学的第一年,所以如果你能在答案中保持同样的简洁,我真的很感激。提前谢谢!
答案 0 :(得分:2)
您似乎需要返回2个单独的值:数组b中的偶数个数,以及仅存储偶数的新分配内存的地址。
由于您无法返回多个变量,因此对您的代码进行最小修改的解决方案如下:
int *paire(int *d, int length, int& counter) {
counter = 0;
// rest of your function remains unchanged
// ...
}
int main() {
int b[8] = {1,2,3,4,5,6,7,8};
int evenNumbers;
int *array1 = paire(b,8, evenNumbers);
for (int i=0; i<evenNumbers; i++) {
cout<<array1[i];
}
delete [] array1;
return 0;
}
或者,您可以返回counter
中的值,并将int*
变量的引用作为paire
函数的参数发送。或者,您可以声明paire
具有返回类型void
,并使用对传回两个值的引用。
答案 1 :(得分:0)
您可以通过分配length
并通过输出参数返回counter
来进一步简化您的功能。
#include <iostream>
using namespace std;
int *paire(int *d, int length, int &counter) {
counter = 0;
int *k = new int[length]; // allocate for the maximum memory
for (int i = 0; i < length; ++i) {
if (d[i] % 2 == 0) {
k[counter++] = d[i];
}
}
return k;
}
int main() {
int b[8] = {1,2,3,4,5,6,7,8};
int counter = 0;
int *array1 = paire(b,8, counter);
for (int i=0; i<counter; i++) { // how can I point here to the counter in paire() ?
cout<<array1[i] << " ";
}
delete [] array1;
return 0;
}
但请注意,正如其他人已经指出的那样,这种方法很容易出错,因为它让客户端有责任删除paire
函数使用的内部存储器。