【问题标题】:Check if array index exists检查数组索引是否存在
【发布时间】:2010-09-20 09:15:24
【问题描述】:

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

我通常使用 php,但我正在尝试在 c++ 中执行此操作,所以基本上我想问是否有 isset() 方法可以与 c++ 一起使用

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

【问题讨论】:

    标签: c++ arrays


    【解决方案1】:

    在 C++ 中,数组的大小在声明时是固定的,虽然您可以访问声明的数组大小的末尾,但这是非常危险的,也是难以追踪的错误的根源:

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

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

    【讨论】:

    • 谢谢 :) 我会阅读地图类并尝试一下,再次感谢!
    • 也可以用map.at()代替[],如果元素不存在就会抛出异常。
    【解决方案2】:

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

    至于教程,我可以为您指出的最好的东西是google search

    【讨论】:

      【解决方案3】:

      要在没有向量的情况下执行此操作,您可以简单地交叉检查要访问的索引与数组的大小。喜欢:if(index &lt; array_size) 是无效索引。

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

      例如:

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

      【讨论】:

        【解决方案4】:

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

        地图为可以通过键(您的“索引”)引用的对象提供容器。

        【讨论】:

          猜你喜欢
          • 2013-03-21
          • 1970-01-01
          • 1970-01-01
          • 2021-07-22
          • 2013-02-24
          • 2020-05-26
          • 2012-10-17
          • 2012-11-30
          • 2015-09-16
          相关资源
          最近更新 更多