检查数组索引是否存在

时间:2008-11-02 11:56:39

标签: c++ arrays

有没有办法检查数组的给定索引是否存在? 我试图设置数字索引,但像1,5,6,10。所以我想知道这些索引是否已经存在,以及它们是否只会增加另一个计数器。

我通常使用php,但我试图在c ++中这样做,所以基本上我试图询问是否有一种isset()方式与c ++一起使用

PS:使用载体会更容易吗?如果是这样,有人能指点我一个好的矢量教程吗?感谢

4 个答案:

答案 0 :(得分:8)

在C ++中,数组的大小在声明时是固定的,虽然您可以在声明的数组大小的末尾访问,但这是非常危险的,并且是难以跟踪的错误的来源:< / p>

int i[10];
i[10] = 2; // Legal but very dangerous! Writing on memory you don't know about

似乎你想要类似于数组的行为,但是没有填充所有元素。传统上,这是哈希表的领域。向量在这里不是一个很好的解决方案,因为你会有空元素占用空间,更好的是像地图,你可以通过搜索它并解释结果来测试元素是否存在:

#include <map>
#include <string>

// Declare the map - integer keys, string values    
std::map<int, std::string> a;

// Add an item at an arbitrary location
a[2] = std::string("A string");

// Find a key that isn't present
if(a.find(1) == a.end())
{
   // This code will be run in this example
   std::cout << "Not found" << std::endl;
}
else
{
   std::cout << "Found" << std::endl;
}

一句警告:使用上述方法查找是否存在密钥,而不是测试默认值

if(a[2] == 0)
{
    a[2] = myValueToPutIn;
}

因为地图的行为是在第一次访问该键值时插入默认构造对象(如果当前没有任何内容)。

答案 1 :(得分:3)

我的个人投票是使用矢量。它们会动态调整大小,只要你不做一些愚蠢的事情(比如尝试并访问一个不存在的元素),它们就会非常友好。

至于教程,我可以指出的最好的事情是google search

答案 2 :(得分:1)

听起来好像地图真的最接近你想要的地图。您可以在STL(标准模板库)(http://www.cppreference.com/wiki/stl/map/start)中使用Map类。

Maps为对象提供了一个容器,可以通过键引用(“索引”)。

答案 3 :(得分:1)

要在没有向量的情况下执行此操作,您只需交叉检查您要使用数组大小​​访问的索引。喜欢:if(index < array_size)它是无效索引。

如果您不知道尺寸,可以使用sizeof运算符找到它。

例如:

int arr[] = {5, 6, 7, 8, 9, 10, 1, 2, 3};
int arr_size = sizeof(arr)/sizeof(arr[0]);