如何检查向量的向量是否存在?

时间:2016-02-27 16:27:07

标签: c++ c++11

我想知道是否存在载体载体

例如

vector<vector<int> > edges;

现在我想检查edge [i]是否存在。我试过了

if(edges[i] == NULL)

但它似乎没有用。如何解决这个问题?

澄清: 我试过检查尺寸。我只是查询它是否已初始化。

5 个答案:

答案 0 :(得分:5)

您可能想要检查edges[i]是否为空:

if (edges[i].empty())

答案 1 :(得分:5)

我认为你可能会混淆检查一个对象是否“存在”,这与边界检查无关。如果你想检查i是否是一个有效的索引,只需检查它是否在向量的大小范围内:

if (i < edges.size())

答案 2 :(得分:1)

使用vector.empty()

if (edges[i].empty()){
}

或使用vector.size()

if (edges[i].size() == 0){
}

答案 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。但在大多数标准实现中,已填充的向量将具有非零容量,而尚未使用的向量将不具有容量。

再说一遍:它并不完美,有办法告诉矢量释放任何容量。