Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计数非重复发生_C++_Arrays - Fatal编程技术网

C++ 计数非重复发生

C++ 计数非重复发生,c++,arrays,C++,Arrays,从以上两个数组中,我要做的是计算数组中不同数字的出现次数num2。不同出现的次数取决于数组num3 例如:在num3[16]中,第一个元素[0]是1010,在数组num1的第8个位置,元素1010是相同的。因此,我们必须为元素1010计算num2中不同数字的出现次数。 因此,对于num3中的1010元素,num2中出现的不同数字是6。num2中的这些不同数字是100101102103104105 对于num3中的下一个条目,它必须是与第一个条目(1010)不同的数字。因此,对于num31015中

从以上两个数组中,我要做的是计算数组中不同数字的出现次数
num2
。不同出现的次数取决于数组
num3

例如:在
num3[16]
中,第一个元素[0]是
1010
,在数组
num1
的第8个位置,元素
1010
是相同的。因此,我们必须为元素
1010
计算
num2
中不同数字的出现次数。 因此,对于
num3
中的
1010
元素,
num2
中出现的不同数字是6。
num2
中的这些不同数字是
100101102103104105

对于
num3
中的下一个条目,它必须是与第一个条目(1010)不同的数字。因此,对于
num3
1015中的相应数组元素,
num2
中的总差异项为2。它们是
num2
数组中的=
106107

如果我在计算相同数量的事件,我可以像这样轻松地完成:

int num2[ ]={100,101,101,102,103,104,104,105,106,106,106,107,107,108,108,108,108,109,109,110};
int num3[ ]={1010,1010,1010,1010,1010,1010,1010,1010,1015,1015,1015,1015,1015,107,107,107,107,107,107,107};
#包括
使用名称空间std;
int main()
{ 
int num2[]={100101101102103104104105106106107108109110};
int n=sizeof(num2)/sizeof(num2[0]);

CUT< P>我起草了许多可能的解决方案之一。我使用C++而不是C,所以没有简单的C风格数组。但是,使用的算法当然也适用于C样式数组。 请注意:您的输入数据错误。您创建了一个包含16个值的数组,但初始值设定项列表的长度为20个值

我正在使用
std::vector
作为解决方案

首先,我们从开始到结束迭代num3。我们将初始“开始”-索引设置为0。然后,我们将第i个元素与第i+1个元素进行比较。只要它们相等,我们就增加i-索引。如果找到下一个不相等的值,则i具有新的不同值的索引

为了计算num2中的不同值,我们使用了一个特殊属性
std::set
std::set
只能包含唯一或不同的值。因此,我们尝试将num2中的所有值放入
std::set
。但只添加不同的值。已经在
std::set
中的值将被丢弃。We具有“start”和“i”,并使用
std::set
的范围构造函数填充它

为了得到结果,我们只需要使用
size()
函数对
std::set
中的元素进行计数

最后,我们设置了一个新的开始值,然后继续。简单的解决方案,但有效

请参阅:

#include <bits/stdc++.h> 
using namespace std; 

int main() 
{ 
 int num2[]={100,101,101,102,103,104,104,105,106,106,106,107,107,108,108,108,108,109,109,110};

    int n = sizeof(num2) / sizeof(num2[0]); 
    cout << "Number of times 101 appears : "
         << count(num2, num2 + n, 101); 

    return 0; 
} 
#包括
#包括
#包括
#包括
#包括
std::向量num2{100101101102103104104105106106107108109110};
std::向量num3{1010101010101010101010101010101010151015101510151015107107};
int main(){
//检查向量的大小是否足够
如果(num2.size()>=num3.size()){
//初始开始值。我们将在num3的开始处搜索
大小\u t开始{0};
while(开始STD::Cube考虑<代码> STD::“代码< >代码> STD::UNIQUIGORION < /COD>删除重复出现,然后<代码> STD::计数< /COD>计数发生。当然,如果您只考虑一个值,也没有办法处理它,如果没有代码的预处理步骤:STD::唯一的< /代码>代码>包括使用命名空间STD;< /代码> -不做。永远不要这样做。你取决于一个特定的实现头是否可用,它是一个包含所有内容的头,然后你添加了“使用命名空间std”现在所有的好名字都在使用中。请,请不要在生产代码中这样做。甚至在测试代码中也不要这样做。哇,我在结束前4分钟回答了。自从引入了新的结束规则,人们必须在圣杯守护者拍摄之前快速回答…我看到这里的规则非常严格。我修正了数组大小e、 我希望国旗会被撤掉。
#include <algorithm>
#include <vector>
#include <set>
#include <iterator>
#include <iomanip>

std::vector<int> num2{ 100,101,101,102,103,104,104,105,106,106,106,107,107,108,108,108,108,109,109,110 };
std::vector<int> num3{ 1010,1010,1010,1010,1010,1010,1010,1010,1015,1015,1015,1015,1015,107,107,107,107,107,107,107 };

int main() {

    // Check for sufficent sizes of the vector
    if (num2.size() >= num3.size()) {
        // Initial start value. We will search at the begin of num3
        size_t start{ 0 };
        while (start < num3.size()) {

            // Set i = equal to current start value. So, search at the beginning of the next unequal number
            size_t i{ start };
            // Find the next non matching value
            while (i < (num3.size() - 1) && (num3[i] == num3[i + 1])) ++i;

            // Copy all values from num 2 in a std::set, which can only contain distinct values
            std::set<int> values(std::next(num2.begin(), start), std::next(num2.begin(), i));

            // Print result. Show number of distinct values
            std::cout << "\n" << std::setw(2) << values.size() << " -> " << std::setw(5) << num3[i] << " --> ";
            std::copy(values.begin(), values.end(), std::ostream_iterator<int>(std::cout, " "));

            // Evaluate next identical values from num3
            start = ++i;
        }
    }
    else std::cerr << "\n***** Error: num2 too short\n";

    return 0;
}