而数组中的每个值都不同于特定的 int 值

Posted

技术标签:

【中文标题】而数组中的每个值都不同于特定的 int 值【英文标题】:while every value in array is different than specific int value 【发布时间】:2019-10-15 18:43:40 【问题描述】:

我有一个值数组,例如1、4、7、2。 我还有另一个值数组,我想将它的值添加到第一个数组中,但前提是它们都不同于该数组中已经存在的所有值。我怎样才能检查它?我尝试了许多类型的循环,但我总是以迭代问题结束。 你能告诉我如何解决这个问题吗?我用 C++ 编写代码。

int array1[7] = 2,3,7,1,0;
int val1 = rand() % 10;
int val2 = rand() % 10;
int array2[2] = val1, val2;

我正在尝试将 array2 中的每个值放入 array1。我试过循环

for (int x:array2)

   while((val1 && val2) == x)
   
      val1 = rand() % 10;
      val2 = rand() % 10; 
   

还有更多,但仍然无法弄清楚。我有这个问题是因为我可能有不同数量的array2 元素。所以它使这个“&&”解决方案变得无限。 这只是一个更清楚地显示它的示例,我的代码有更多行。

【问题讨论】:

你真的需要一个数组吗?可以改用 std::set<int> 吗? 请显示您尝试过但不适合您的实际代码。在数组中搜索特定值非常简单。或者您可以使用标准的std::find() 算法为您进行搜索 是的,最好为数组搞清楚 数组填完后怎么办? (val1 && val2) == x 不会做你认为它做的事情,一个单一的条件甚至不会在这里工作。您也没有跟踪在 array1 中分配了哪些数组值,因此甚至不清楚我们应该将新值放在哪里。 【参考方案1】:

好的,这里有一些问题。如果我理解这个问题,这就是你想要的:

A.您的 array1 已经填充了几个值,但末尾有空格。 1. 你如何识别数组中已有的条目数和额外的条目数?

B.您有第二个由两个随机值组成的数组。没问题。

您想将 B 中的值附加到 A。 2.如果A的初始长度加上B的初始长度大于分配给A的总空间,你有一个新的问题。

现在,其他人会告诉您使用标准模板库,但如果您在此级别遇到问题,您应该知道如何在没有混乱库的额外帮助的情况下自己执行此操作。所以这是一种解决方案。

class MyArray 
public:
    int * data;
    int count;
    int allocated;

    MyArray() : data(nullptr), count(0), allocated(0) 
    ~MyArray()  if (data != nullptr) free(data); 

    // Appends value to the list, making more space if necessary
    void add(int value) 
        if (count >= allocated) 
            // Not enough space, so make some.
            allocated += 10;
            data = (data == nullptr) malloc(allocated * sizeof(int))
                 : realloc)data, allocated * sizeof(int));
        
        data[count++] = value;
    

    // Adds value only if not already present.
    void addUnique(int value) 
        if (indexOf(value) < 0) 
            add(value);
        
    

    // Returns the index of the value, if found, else -1
    int indexOf(int value) 
        for (int index = 0; index < count; ++index) 
            if (data[index] == value) 
                return index;
            
        
        return -1;
    


这个类为您提供了一个动态的整数数组。它真的很基础,但它教你基础知识。它可以帮助您了解使用旧式 C 风格的 malloc/realloc/free 分配/重新分配空间。这是我在 80 年代写的那种代码。

现在,你的主要代码:

MyArray array;
array.add(2);
array.add(3);
array.add(7);
// etc. Yes, you could write a better initializer, but this is easy to understand

MyArray newValues;
newValues.add(rand() % 10);
newValues.add(rand() % 10);

for (int index = 0; index < newValues.count; ++index) 
    array.addUnique(newValues.data[index]);

完成。

其中的关键部分是 addUnique 函数,它首先检查您要添加的值是否已经在数组中。如果不是,它将值附加到数组并跟踪新计数。

最终,当使用像这样的整数数组而不是 C++ 中可用的更高级的类时,您必须自己跟踪数组的大小。 int[] 上没有神奇的 .length 方法。如果需要,您可以使用一些指示列表结尾的魔法值。或者你可以像我一样保留两个值,一个保存当前长度,一个保存你分配的空间量。

通过编程,总是有多种方法可以做到这一点。

现在,这是很多代码。使用标准库,您可以将所有这些减少到大约 4 或 5 行代码。但是您还没有为此做好准备,您需要了解幕后发生的事情。在您可以手动完成之前,不要使用花哨的库。这是我的信念。

【讨论】:

以上是关于而数组中的每个值都不同于特定的 int 值的主要内容,如果未能解决你的问题,请参考以下文章

java中,声明基础变量和数组后都有默认值。例如int i;//默认值是0;int []i=new int [10];//默认值都是0

JavaScript——数组

2022-01-04:一个无序数组长度为n,所有数字都不一样,并且值都在[0...n-1]范围上。 返回让这个无序数组变成有序数组的最小交换次数。 来自小红书。

二维 int 数组打印一行值,而不仅仅是一个

不用循环,python numpy 数组如何对每个元素进行操作?

数组动态初始化时,数组元素会被赋予一个默认值,简述各数据类型的初始值?