如何在C ++中返回Null作为参考?

Jav*_*Dev 0 c++ return vector return-value

我做了一些最少的代码

vector<int> items = {1, 2, 5, 0, 7};
int& getAtSafe(unsigned n) {
    if (n < items.size() && items[n] != 5) return items[n];
    else // ???
}
Run Code Online (Sandbox Code Playgroud)

但是,当我们找不到所需的项目时,如何返回空值呢?
PS原始任务正在搜索属性等于的项目。

不接受异常变体。我不需要暂停程序。
例如,用户输入索引,并且每次输入错误时,用户都会获得“输入错误”

Vla*_*cow 7

如果函数检查索引,则在这种情况下的一般方法是引发异常 std::out_of_range.

考虑到at类模板中已经存在成员函数std::vector

如果您可能不使用异常并且任务是

PS原始任务正在搜索属性等于的项目。

那么您可以使用std::find_if返回迭代器的标准算法,也可以编写自己的函数以返回与搜索到的元素对应的索引。如果没有这样的元素,则返回向量的大小,例如

#include <iostream>
#include <vector>

template <typename Predicate>
std::vector<int>::size_type find_if( const std::vector<int> &v, Predicate predicate )
{
    std::vector<int>::size_type i = 0;

    while ( i != v.size() && !predicate( v[i] ) ) ++i;

    return i;
}

int main() 
{
    std::vector<int> items = {1, 2, 5, 0, 7};

    auto i = ::find_if( items, []( const auto &item ) { return item % 2 == 0; } );

    if ( i != items.size() ) std::cout << items[i] << '\n';

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • @JavascriptDev根本不接受吗?为什么?还是不被接受传播到程序之外?然后,您可以简单地将它们从“ getAtSafe”(或更好的“ items.at(n)”)中捕获,并显示错误消息。 (2认同)