Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++_Arrays - Fatal编程技术网

C++ 检查数组索引是否存在

C++ 检查数组索引是否存在,c++,arrays,C++,Arrays,有没有办法检查数组的给定索引是否存在? 我试着设置数字索引,但大约是1,5,6,10。所以我想看看这些索引是否已经存在,它们是否增加了另一个计数器 我通常用PHP工作,但是我尝试用C++来做这件事,所以我基本上是想问一下是否有一个ISCSET()方式来与C++ < /P>一起使用。 PS:使用向量会更容易吗?如果是这样的话,有谁能给我介绍一个好的矢量教程吗?谢谢我个人投票支持使用向量。它们将动态调整大小,只要您不做一些愚蠢的事情(比如尝试访问不存在的元素),它们就可以非常友好地使用 至于教程,我

有没有办法检查数组的给定索引是否存在? 我试着设置数字索引,但大约是1,5,6,10。所以我想看看这些索引是否已经存在,它们是否增加了另一个计数器

我通常用PHP工作,但是我尝试用C++来做这件事,所以我基本上是想问一下是否有一个ISCSET()方式来与C++ < /P>一起使用。


PS:使用向量会更容易吗?如果是这样的话,有谁能给我介绍一个好的矢量教程吗?谢谢

我个人投票支持使用向量。它们将动态调整大小,只要您不做一些愚蠢的事情(比如尝试访问不存在的元素),它们就可以非常友好地使用


至于教程,我可以指出的是C++中的

< P>,数组的大小在声明时是固定的,而当您可以访问声明的数组大小的末尾时,这是非常危险的,并且难以追踪bug的来源:

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;
}

因为映射的行为是在第一次访问该键值时插入一个默认构造的对象,如果当前不存在任何对象。

在我看来,映射实际上与您想要的最接近。可以使用STL(标准模板库)()中的Map类


地图为可以被键引用的对象(您的“索引”)提供了一个容器。

要在没有向量的情况下实现这一点,您只需根据数组的大小交叉检查要访问的索引。例如:
if(index
它是无效的索引

如果您不知道大小,可以使用
sizeof
运算符查找

例如:

int arr[] = {5, 6, 7, 8, 9, 10, 1, 2, 3};
int arr_size = sizeof(arr)/sizeof(arr[0]);
谢谢:)我会在地图课上阅读,然后再试一次谢谢!您还可以使用map.at()而不是[],如果元素不存在,则会引发异常。
int arr[] = {5, 6, 7, 8, 9, 10, 1, 2, 3};
int arr_size = sizeof(arr)/sizeof(arr[0]);