如何找到指向数组中元素的指针的索引?

时间:2018-04-16 18:21:14

标签: c++ arrays c++11 pointers indexing

所以我试图编写一个向我的数组添加元素的方法。我的find_key()方法返回一个指向一个元素的指针,该元素等于或大于现有数组中的元素。有没有办法可以找到我的指针从find_key()指向的元素的索引?

这是我到目前为止所做的工作

template<typename K, typename V>
bool MapSet<K,V>::add(Node<K,V> n)
{
  Node<K, V> *ptr = find_key(n.first);
  if (size() == capacity_)
  {
    capacity_ *= 2; // Double capacity
    auto *new_data = new [capacity_]; // New array with double capacity
    copy(ary_, ary_+last_, new_data); // Copy over
    swap(ary_, new_data); // Swap pointers
    delete [] new_data; // Delete old array pointer (old since swapped)
  }
  if (size() == 0)
  {
    ary_[0].first = n.first;
    ary_[0].second = n.second;
    return true;
  }
  else if (ptr == ary_+last_)
  {
    ary_[ptr].first = n.first;
    ary_[ptr].second = n.second;
    return true;
  }
  else if ((*ptr) == n.first)
  {
    return false;
  }
  else if ((*ptr) !== n.first)
  {
    ary_[ptr-1].first == n.first;
    ary_[ptr-1].second == n.second;
    return true;
  }

}

1 个答案:

答案 0 :(得分:0)

由于您正在使用指针,因此只需将指针从找到的指针中减去指向数组中第一个元素的指针即可将索引输入数组。所以

Node<V, K>* ptr = ...
size_t index = static_cast<size_t>(ptr - ary_);

应该做的伎俩(如果数组来自类型Node<V, K>[])。如果您的类支持迭代器,您也可以使用std::distance