C++ 如何初始化空对向量(c+;+;)

C++ 如何初始化空对向量(c+;+;),c++,null,stdvector,C++,Null,Stdvector,我有一个向量对,它在开始时是空的。我实现了一个自定义的insert和remove方法,我还希望能够为某些元素分配NULL,但我不能,因为它不是指向pair的指针 如果我试着更具体地解释它,给定一个向量V std::vector< std::pair<A,B> > V; 也不是 会有用的 我需要这样做,以检查是否已经有一个元素保存在某个插槽中。有什么解决办法吗?或者我应该创建另一个布尔向量来保存某个特定插槽是否已满 注意:我知道任何类型的映射都可以优雅地解决它,但它必须是

我有一个向量对,它在开始时是空的。我实现了一个自定义的insert和remove方法,我还希望能够为某些元素分配NULL,但我不能,因为它不是指向pair的指针

如果我试着更具体地解释它,给定一个向量V

std::vector< std::pair<A,B> > V;
也不是

会有用的

我需要这样做,以检查是否已经有一个元素保存在某个插槽中。有什么解决办法吗?或者我应该创建另一个布尔向量来保存某个特定插槽是否已满


注意:我知道任何类型的映射都可以优雅地解决它,但它必须是一个向量。

我认为在您的情况下,使用映射的解决方案将是最佳的:

std::map<int, std::pair<A, B> > M;

为元素设置空值。

如果必须这样做,我会执行类似于
vector>V
V[i]。秒可以是0或1,具体取决于元素

pair必须为NULL或不为NULL。如果您想将pair标记为NULL,但仍保留它以供参考,则使用
map
,如Alex1985所述。

使用shared\u ptr作为pair中的第二种类型

std::vectorV

V.assign(编号,std::shared_ptr())

V[n]=std::shared_ptr()

V[n]=std::shared_ptr(新的B())

如果(V[n].get()==NULL){/*进程在此为空*/}


在Tr1中,SydDypTR类被引入C++中,是C++ 11规范的一部分。它适用于标准容器,因为它

我建议您查看boost::optional

boost::optional< std::vector< std::pair<A,B> > > V;
if (V) {
    // V was initialized
} else {
   // wasn't initialized
}

boost::optional也许你可以使用boost::optional?我认为vector不是这个用例的合适容器。V应该是一个std::vector。也许你应该重新思考为什么你希望任何东西都是“null”。这听起来可能是个误入歧途的想法。@smihael:你可以用
NULL
随机初始化东西
NULL
用于指针。您的容器元素不是指针,这意味着您将无法用
NULL
在任何有意义的术语意义上初始化主题。忘了
NULL
。如果您想检查某个插槽是否已初始化,则必须发明其他内容
NULL
在这里没有任何位置。这不起作用,因为向量中存储的类型是
std::pair
。您需要相应地访问
对的成员变量(即
V[n].second=std::shared_ptr();
std::map<int, std::pair<A, B> > M;
M.erase(M.find(number))
boost::optional< std::vector< std::pair<A,B> > > V;
if (V) {
    // V was initialized
} else {
   // wasn't initialized
}