我有一个元素,它是std::optional中的std::vector。现在我想把一个元素放到向量中(通过emplace_back):
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <optional>
int main()
{
    std::optional<std::vector<uint8_t>> optvec;
    optvec->reserve(1);
    optvec->emplace_back(1);
    std::cout << optvec.has_value() << std::endl;
    return 0;
}但是,对于内存,这会正确地嵌入元素本身,但可选部分不会得到存在元素的信息,所以它是一个nullopt。
有没有其他方法可以做到这一点?提前谢谢。
发布于 2021-07-14 17:45:54
当你这样做的时候
std::optional<std::vector<uint8_t>> optvec;
optvec->reserve(1);你的程序有未定义的行为,就像你已经做的一样。
std::vector<uint8_t> * optvec{ nullptr };
optvec->reserve(1);为什么你想要一个可选的向量呢?一个向量已经可以包含零个元素。
有没有其他方法可以做到这一点?
有一个(可能为空的)普通向量。
std::vector<uint8_t> optvec;发布于 2021-07-14 17:47:36
您的optional不包含任何向量。optional的默认构造函数将其构建为不包含任何值的对象。
您可以简单地
std::optional<std::vector<uint8_t>> optvec = std::vector<uint8_t>();或者..。
std::optional<std::vector<uint8_t>> optvec;
optvec.emplace();然后在你的optional中有一个实际的向量
发布于 2021-07-14 18:08:39
有没有其他方法可以做到这一点?
是,为optional赋值
int main()
{
  std::optional<std::vector<uint8_t>> optvec;
  assert(!optvec.has_value());
  optvec = { 'a', 'b', 'c' };
  assert(optvec.has_value());
  optvec.value().emplace_back('d');
}https://stackoverflow.com/questions/68375672
复制相似问题