在 C++ 中遍历可选向量

Iterate through optional vector in C++

我有一个可选的向量,例如 optional<std::vector<string>> vec = {"aa", "bb"};

如何遍历向量?

正在执行以下操作:

for (string v : vec) {
    cout<<v<<endl;
}

报错:

error: no matching function for call to ‘begin(std::optional<std::vector<std::__cxx11::basic_string<char> > >&)’
     for (string v : vec) {
                     ^~~~~~~~~~~~~~~~~~~~~~~

如何遍历可选向量?

vec 上使用 dereference operator

for (string v : *vec) {
    cout<<v<<endl;
}

请注意,如果 vec.has_value() == false,您的程序将表现出未定义的行为。所以...先检查一下。

以下代码有效:

#include<iostream>
#include <string>
#include <vector>
#include <optional>

int main()
{
    std::optional<std::vector<std::string>> vec({ "aa", "bb" });

    if (vec.has_value()) // If vec has a value
    {
        for (auto& v : vec.value()) 
        {
            std::cout << v << std::endl;
        }
    }
}

在上面的代码中,我使用 vec.value().

遍历 vector 的元素