在数组中查找元素然后使用指针进行交换

时间:2014-11-22 05:58:25

标签: c++ arrays pointers boolean swap

尝试编写一个名为bool findElement(int elt)

的方法

首先遍历elementData以找到元素elt。如果找到,则该方法返回true,但是找到的元素(当存在重复元素时最左边的元素)被移动到数组的前面并与第0个元素交换。

例如,如果调用的数组(由elementData指向)包含[6,2,4,7,3]和findElement(7),则该函数将数组更改为[7,2,4,6,3 ]并返回true。如果在数组中找不到该元素,则该函数返回false。

这是我到目前为止所拥有的

bool findElement(int elt)
{
    double temp2 = elementData[i];
    elementData[i] = elementData[0];

    for (int i = 0; i < size; i++)
    {

        if (elementData[i] == elt)
            return true && elementData[0] = temp2;

        else
            false;
    }   
}

错误: 大小未定义 elementData未定义

这就是输出应该是什么样子

findElement(4)=&gt;真正 [4,2,6,7,3] - 大小= 5,容量= 8

findElement(1)=&gt;假 [3,2,6,7,4] - 大小= 5,容量= 8

2 个答案:

答案 0 :(得分:0)

如果不了解元素的存储方式,很难帮助您。它们是一个简单的(类似的)数组吗?它们是否在像std :: vector?

这样的C ++ stl包含器中

如果他们在一个简单的类似数组中你可以做

template <typename T>
bool findElement(T element, T* array, size_t size)
{
    T* ptr = std::find(array, array+size, element);
    if (ptr == array+size) return false;
    std::swap(*array, *ptr);
    return true;
}

答案 1 :(得分:0)

您必须在函数定义之前定义elementData和size。简单地说:

double elementData[] = {6, 2, 4, 7, 3};
int size = 5;

我认为由于短路评估,return true && elementData[0] = temp2;不是你想要的。你应该这样写:

if (elementData[i] == elt){
    elementData[0] = temp2;
    return true;
}
else return false;