如何编写一个将在数组中搜索值并通过引用将该值的位置传递回主函数的void函数?

时间:2019-04-08 00:06:09

标签: c++ arrays function for-loop search

用户将输入一个值(大小),该值表示要处理的值的数量。输入的值将存储在具有1000个元素的short类型的数组中。用户将输入尺寸编号。用户将输入搜索值。程序将在数据中搜索特定值。程序将显示一条消息,其中找到了该值的元素,或者显示一条消息,未找到该值

//使用顺序搜索来搜索数组的功能

///将下标/元素号分配给找到的偏移量,如果找不到,则分配偏移量-1。

无效的顺序搜索(短数据[],短大小,短搜索值,短和偏移量

for (int n = 0; n < size; n++)
{
    if (search_value == data[n])
        offset = n;
    else 
        offset = -1;
}

我只为数组的最后一个元素找到一个值,而我对于从这里去哪里感到困惑。如果我删除else语句,我将获得数组中值的位置,但它还会为任何数字值提供数组中的最后位置。

2 个答案:

答案 0 :(得分:0)

for 语句之前,

Do offset = -1。找到好发现后进行的任何负面发现都会破坏您的发现。

这不是惯用的c ++。 惯用的方法是使用find。

auto data_result = std::find(data, data + size, element);
auto offset = data_result - data;

答案 1 :(得分:0)

使用STL进行此操作的“正确”方法是使用find中的algorithmdistance中的iterator

short data[] = {10, 20, 30}; // length 3
ptrdiff_t index = std::distance(data, std::find(data, data + 3, 20));

代码示例的问题在于,一旦找到正确的索引,就将继续并覆盖所找到的值。您应该添加一个break或一个return,以便您的代码成为:

void sequential_search(short data[], short size, short search_value, short &offset) {
    for (unsigned int i = 0; i < size; ++i) {
        if (data[i] == search_value) {
            offset = data[i];
            return;
        }
    }
    // Value has not been found, and whole array has been checked
    offset = -1;
}