假设我们传入了数组{1,2,3,1,2,3,1},我们想要 删除所有出现的数字3.结果数组将是 {1,2,1,2,1},返回值为5,因为现在有 数组中只有5个项目。 此功能有误。我不知道如何删除事件。我知道我的索引保存了事件的位置。所以我需要从我的数组中删除那些位置。 HELP !! 我只能使用数组,我不能使用向量或指针。
void test() {
int data[] = { 2, 1, 3, 2, 5, 2, 7, 8, 4, 9 };
int length = 10;
int x = 2;
int index = 0;
int counter =0;
int tempIndex = 0;
int finalLength = 0;
for (int i = 0; i < length; i++)
{
if (x != data[i]) {
tempIndex = i;
counter++;
cout << "Array: " << tempIndex << endl;
}
}
cout << "Size: " << counter << endl;
}
答案 0 :(得分:2)
您可以使用C ++中提供的std :: remove函数,您可以执行以下操作
int data[] = { 2, 1, 3, 2, 5, 2, 7, 8, 4, 9 };
int length = 10;
int* pbegin = myints;
int* pend = data+sizeof(data)/sizeof(int);
pend = std::remove (pbegin, pend, 3);
for (int* p=pbegin; p!=pend; ++p)
std::cout << *p;
答案 1 :(得分:1)
您无法在不创建新阵列的情况下调整C样式阵列的大小。这是固定的。如果您正在寻找计算特定元素的出现次数并跟踪新数据的总和,那么您可以简单地执行
void test() {
int data[] = { 2, 1, 3, 2, 5, 2, 7, 8, 4, 9 };
int length = 10;
int x = 2;
//int index =0;
int sum(0);
int counter = 0;
for (int i = 0; i < length; i++) {
if (x == data[i]) {
//index = i;
//--counter; //return # of ocurrences in array
//cout << "Position of ocurrences: " << index << endl;
++counter;
}else{
sum += data[i];
}
}
//for (int a = counter; a < length; a++) {
//data[a] = data[a + 1];
//cout <<"testing"<< data[a];
//}
cout << "Number of ocurences: " << counter << " sum: " << sum << endl;
}
另一种方法是将重复元素赋值为零,但这不会调整数组大小,而是消除重复元素。这是一种解决方法,但它会修改原始数据。
答案 2 :(得分:1)
正如其他人已经说过的那样,直到他们面对蓝色(可能),你不能调整数组的大小。内存是固定的。您可以做的是跟踪您要“移除”的匹配元素,并移动其余元素以使其看起来已被删除。实际情况是内存中的数组仍然是您开始使用的大小,但您可以使用“新”数组的计算大小打印结果。
以下代码应该做你想要的。第一个参数是您的数据数组,下一个参数将是所述数组的固定大小。最后一个参数是您要“删除”所有出现的数字。函数remove_match
将返回数据数组的大小减去它找到的任何匹配项。如果要使用返回值打印结果数组,则只会移动数组,以便只显示不匹配的元素,因为它是新的大小。
int remove_match(int array[], int length, int match)
{
size_t shift(0);
int removed(0);
for (size_t i = 0; i < length; ++i)
{
if (array[i] == match)
{
removed++;
}
else
{
array[shift++] = array[i];
}
}
return (length - removed);
}
您可以像这样调用此函数,例如
int match = 2;
int data[] = { 2, 1, 3, 2, 5, 2, 7, 8, 4, 9 };
int length = 10;
int newLength = remove_match(data, length, match);
// validate your results
for(int i = 0; i < newLength; ++i)
{
std::cout << data[i] << " ";
}
std::cout << std::endl;