C++ 从数组中提取对数

C++ 从数组中提取对数,c++,arrays,pointers,C++,Arrays,Pointers,各位晚上好 我目前在从数组中提取对号时遇到困难。我有以下代码: #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++; }

各位晚上好

我目前在从数组中提取对号时遇到困难。我有以下代码:

#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;
}
#包括
使用名称空间std;
整数*对(整数*d,整数长度){
int计数器=0;
int位置=0;

对于(int i=0;i而言,似乎需要返回两个单独的值:数组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;
}
int*paire(int*d,int-length,int&counter){
计数器=0;
//函数的其余部分保持不变
// ...
}
int main(){
int b[8]={1,2,3,4,5,6,7,8};
整数;
int*array1=成对(b,8,偶数);

对于(int i=0;i而言,似乎需要返回两个单独的值:数组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;
}
int*paire(int*d,int-length,int&counter){
计数器=0;
//函数的其余部分保持不变
// ...
}
int main(){
int b[8]={1,2,3,4,5,6,7,8};
整数;
int*array1=成对(b,8,偶数);

对于(int i=0;i,您可以通过分配到
长度
的函数并通过输出参数返回
计数器
来进一步简化您的函数

#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;
}
#包括
使用名称空间std;
整数*对(整数*d,整数长度,整数和计数器){
计数器=0;
int*k=new int[length];//分配最大内存
对于(int i=0;i对于(int i=0;i,您可以通过分配到
长度
的函数并通过输出参数返回
计数器
来进一步简化您的函数

#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;
}
#包括
使用名称空间std;
整数*对(整数*d,整数长度,整数和计数器){
计数器=0;
int*k=new int[length];//分配最大内存
对于(int i=0;i对于(int i=0;ii如果您使用的是
std::vector
而不是裸指针,那么您的所有问题(包括内存泄漏)都会消失。不要害怕。使用
std::vector
比原始指针“我有困难”更容易而不是更难不是问题描述。有什么困难?哪些是您不需要发生的,哪些是错误发生的?请阅读,如果您必须
new[]
,请同时
delete[]array1;
如果您使用的是
std::vector
而不是裸指针,那么您的所有问题(包括内存泄漏)都会消失。不要害怕。使用
std::vector
比原始指针“我有困难”更容易而不是更难不是问题描述。有什么困难?哪些是您不需要发生的,哪些是错误发生的?请阅读,如果您必须
new[]
,请同时
delete[]array1;