Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除和元素的向量,并在C++中留下空的空间_C++ - Fatal编程技术网

删除和元素的向量,并在C++中留下空的空间

删除和元素的向量,并在C++中留下空的空间,c++,C++,我有一个向量: x = 1 2 3 4 5 6 7; 我想删除该向量的一个元素,并保持空位置不变: 如何在C++中实现这一点?我对我应该使用的关键字感到非常困惑,我不知道该用什么来找到这个问题的正确答案。没有空int这样的东西,因此连续的int序列,例如std::vector,不能有空元素 您可以使用std::optional,它有无值的概念 #include <iostream> #include <vector> #include <optional>

我有一个向量:

x = 1 2 3 4 5 6 7;
我想删除该向量的一个元素,并保持空位置不变:


如何在C++中实现这一点?我对我应该使用的关键字感到非常困惑,我不知道该用什么来找到这个问题的正确答案。

没有空int这样的东西,因此连续的int序列,例如std::vector,不能有空元素

您可以使用std::optional,它有无值的概念

#include <iostream>
#include <vector>
#include <optional>
#include <algorithm>

template<typename T>
std::ostream& operator<<(std::ostream & os, const std::vector<std::optional<T>> & vec)
{
    for (auto & el : vec)
    {
        if (el)
            os << *el << ' ';
        else
            os << "  ";
    }
    return os << '\n';
}

int main()
{
    std::vector<std::optional<int>> vals = { 1, 2, 3, 4, 5, 6, 7 };

    std::cout << vals;

    *std::find(vals.begin(), vals.end(), 5) = std::nullopt;
    *std::find(vals.begin(), vals.end(), 6) = std::nullopt;

    std::cout << vals;

    return 0;
}

真正的问题是,在移除体素的某些部分后,我需要重新排列表示3D图像的体素,比如从初始体积裁剪一个小体积。我尝试过使用循环中断。但是,空空间总是由下一个值填充。所以我认为我能做的可能是用其他数字来分配空值,或者完全让空空间保持原样


嗯……我可能想得太多了,就像有些人说的那样。但我确实需要解决这个问题。无论如何,谢谢你的帮助:。

你可以使用std::vector,但我怀疑这是否可行solution@Slave:看起来很完美me@LightnessRacesinOrbit是的,主人@斯拉瓦:很好,奴隶!创建一个整数向量。删除一个整数时,实际上意味着要删除其信息。但是向量是存储在内存中的东西,所以当您再次调用元素时,它会将指定的位序列转换为整数。不存在没有赋值的整数变量。我建议,与其删除它,不如给它指定一个可区分的非自然出现的值。例如,如果它们都是正整数,只需将它们替换为-1。我怀疑这实际上是对可能有简单解决方案的XY问题的过度杀伤力。是的,这里有一半的行用于显示向量中的值,但我支持第一句话。std::optional比std::unique_ptr或int*好得多。std::optional对我来说是新的,看起来很有用-类似于它的系统。在c中可以为null我想c已经为它内置了语法糖tho-int?@pm100不,std::optional就像在c中一样,Nullable是std::unique_ptr或std::shared_ptr或gsl::observer听起来你实际上并不需要这些间隙。您可以从std::vector中的任何位置删除元素,尽管删除最后一个元素最有效。我想从整个体积中删除一些体素,并保持其余体素的位置。在排序中,我想在初始体积内创建一个孔。这个位置听起来好像你实际上不想要一个连续的容器,而是一个关联的容器。您可以使用std::map或类似的工具来代替std::vector