将数组传递回主体

  • 本文关键字:主体 数组 c++
  • 更新时间 :
  • 英文 :


我正在考虑网络中可用于优化项目的函数。我偶然发现了 Bateesh 的可用代码,我发现它非常有用。但是我想稍微修改他的代码,以便

**而不是打印输出,它将在我的主体中传输,以便在下一个过程中使用。

我该怎么做?我有新的C++所以任何建议都会有所帮助。我目前正在阅读有关传递数组的信息,但我对新想法感到茫然。

谢谢。

// Program to print all combination of size r in an array of size n
#include <stdio.h>
#include <stdlib.h>
void combinationUtil(int arr[], int n, int r, int count, int data[], int i);
// Needed for qsort.  See http://w...content-available-to-author-only...s.com/reference/cstdlib/qsort/
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
// The main function that prints all combinations of size r
// in arr[] of size n. This function mainly uses combinationUtil()
void printCombination(int arr[], int n, int r)
{
// A temporary array to store all combination one by one
int data[r];
// Sort array to handle duplicates
qsort (arr, n, sizeof(int), compare);
// Print all combination using temprary array 'data[]'
combinationUtil(arr, n, r, 0, data, 0);
}
/* arr[]  ---> Input Array
n      ---> Size of input array
r      ---> Size of a combination to be printed
index  ---> Current index in data[]
data[] ---> Temporary array to store current combination
i      ---> index of current element in arr[]     */
void combinationUtil(int arr[], int n, int r, int index, int data[], int i)
{
// Current cobination is ready, print it
if (index == r)
{
for (int j=0; j<r; j++)
printf("%d ",data[j]);
printf("n");
return;
}
// When no more elements are there to be put
if (i >= n)
return;
// current is included, put next at next location
data[index] = arr[i];
combinationUtil(arr, n, r, index+1, data, i+1);
// Remove duplicates
while (arr[i] == arr[i+1])
i++;
// current is excluded, replace it with next (Note that
// i+1 is passed, but index is not changed)
combinationUtil(arr, n, r, index, data, i+1);
}
// Driver program to test above functions
int main()
{
int arr[] = {1, 2, 1, 3, 1};
int r = 3;
int n = sizeof(arr)/sizeof(arr[0]);
printCombination(arr, n, r);
return 0;
}

根本不使用数组

我不打算回答你提出的问题,因为我认为原始数组在大多数情况下是不好的。如果它们被传递,则更是如此(这就是您所要求的(。

然而,C++确实提供了原始数组的替代方案(想到std::arraystd::vector(。我建议首选这些而不是原始数组,除非您自己编写容器。它们的性能非常可靠。


使用C++标准库函数

如果我理解正确,您正在尝试显示给定数字集合中唯一值的所有可能排列。您可以使用一些C++库函数来执行此操作:

#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
// Create vector
std::vector<int> v { 1, 2, 1, 3, 1 };
// Sort vector
std::sort(v.begin(), v.end());
// Move all duplicate entries to the end of the vector
auto it = std::unique(v.begin(), v.end());
// Trim vector so that the duplicates are no longer contained
v.resize(std::distance(v.begin(), it));
// Iterate as long as the function can rearrange the objects as a
// lexicographicaly greater permutation
do
{
// Print all elements in the vector
for(auto i : v)
std::cout << i << " ";
// Add new line character and flush output
std::cout << std::endl;
} while(std::next_permutation(v.begin(),v.end()));
return 0;
}

输出:

1 2 3 
1 3 2 
2 1 3 
2 3 1 
3 1 2 
3 2 1 

您可以通过在函数printCombination中将返回类型更改为std::vector<std::string>来返回数组。由于combinationUtil()被称为递归,因此最好从函数中传递std::vector<std::string>变量printCombination并让它由combinationUtil()填充。最后,您可以从printCombination返回该变量,并使其可用于main()

最新更新