用户将输入一个值(大小),表示要处理的值的数量。输入的值将存储在short类型的数组中,该数组包含1000个元素。用户将输入大小编号。用户将输入搜索值。程序将在数据中搜索特定值。程序将显示一个消息,其中找到值的元素或显示未找到值的消息
//使用顺序搜索搜索数组的功能
//将下标/元素#分配给找到的偏移量,如果未找到则分配偏移量-1。
void sequential_search(short data [],short size,short search_value,short&offset)
for (int n = 0; n < size; n++)
{
if (search_value == data[n])
offset = n;
else
offset = -1;
}
我只是为数组的最后一个元素找到了一个值,我很困惑从这里开始。如果我取出else语句,我得到数组中值的位置,但它也给出了数组中最后一个位置的任何数值。
在for语句之前执行offset = -1。在一次好的发现后你发现的任何负面发现都会破坏你的好发现。
这不是惯用的c ++。惯用的方法是使用find。
auto data_result = std::find(data, data + size, element);
auto offset = data_result - data;
使用STL执行此操作的“正确”方法是使用来自find
的algorithm
和来自distance
的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;
}