而数组中的每个值都不同于特定的 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
2022-01-04:一个无序数组长度为n,所有数字都不一样,并且值都在[0...n-1]范围上。 返回让这个无序数组变成有序数组的最小交换次数。 来自小红书。