在 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
的元素
我有一个可选的向量,例如 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
的元素