我想知道是否存在载体载体
例如
vector<vector<int> > edges;
现在我想检查edge [i]是否存在。我试过了
if(edges[i] == NULL)
但它似乎没有用。如何解决这个问题?
澄清: 我试过检查尺寸。我只是查询它是否已初始化。
答案 0 :(得分:5)
您可能想要检查edges[i]
是否为空:
if (edges[i].empty())
答案 1 :(得分:5)
我认为你可能会混淆检查一个对象是否“存在”,这与边界检查无关。如果你想检查i
是否是一个有效的索引,只需检查它是否在向量的大小范围内:
if (i < edges.size())
答案 2 :(得分:1)
答案 3 :(得分:1)
vector<vector<int> > edges;
现在我想检查
edges[i]
是否存在。
std::vector
似乎是错误的(外部)数据类型。也许您应该使用std::map
代替:
std::map<int, std::vector<int>> edges;
if (edges.find(i) == edges.end()) {
// does not exist
}
答案 4 :(得分:0)
#include <sstream>
(或更准确地说,因为您标记了C ++ 11,NULL
)用于检查指针。您已声明nullptr
具体实例,因此指针不适用,如果测试
vector
然后if (i < edges.size())
初始化 - 即构建。接下来,您可以检查它是否已填充:
vector
但是,这不会区分未初始化和当前为空,请考虑:
if (i < edges.size() && !edges[i].empty())
它 为空,但它已被初始化并使用,如果这是你初始化的定义。
然而,还有一个技巧,但它倾向于未定义的行为。
std::vector<int> v;
v.push_back(1);
v.pop_back(); // now it's empty again
bool uninitialized = v.empty(); // lies
这将告诉您if (i < edges.size() && edges[i].capacity() == 0)
是否分配了任何内存。在最糟糕的情况下,如果vector
积极释放,则相当于vector
。但在大多数标准实现中,已填充的向量将具有非零容量,而尚未使用的向量将不具有容量。
再说一遍:它并不完美,有办法告诉矢量释放任何容量。