在向量C++中查找最后定义的元素

Find Last Defined Element in Vector C++

本文关键字:定义 元素 最后 查找 向量 C++      更新时间:2023-10-16

我正在尝试在C++向量中获取最后一个定义的元素,但是vector::capacity和vector::size都只是给了我最大大小。例如:

int main() {
     char* array = new char[MAX_SIZE]; //MAX_SIZE is a const int equaling 100
     std::cout << "Enter in a number: ";
     std::cin >> array;
     std::vector<char> cVector;
     cVector.reserve(MAX_SIZE); 
     cVector.assign(array, array + MAX_SIZE);
     for (std::vector<char>::const_iterator i = cVector.begin(); i != cVector.end(); ++i) 
     {
          std::cout << *i;
     }
     std::cout << std::endl;
     std::cout << "Size: " << cVector.size() << std::endl;
     std::cout << "Actual size: " << cVector.capacity() << std::endl;
}

示例输出:

Enter in a number: 55
55
Size: 100
Actual size: 100 [Should say 2]

我尝试过使用 vector::end() 和类似的方法,但我无法获取最后一个元素的索引。

当你调用reserve(MAX_SIZE)时,你会改变容量,所以输出100应该是它应该的样子。您打印出值的循环实际上遍历了所有 100 次,但所有剩余的字符都,因此std::cout将这些指针解释为空字符串。这是一个稍微修改的版本,可以创建一个适当的向量,因此vector.back()将指向最后一个元素并vector.end()内存中的下一个位置。

int main() {
    std::string s;
    std::cout << "Enter in a number: ";
    std::cin >> s;
    std::vector<char> cVector;
    cVector.reserve(MAX_SIZE);
    cVector.assign(&s[0], &s[0]+s.size());
    for (std::vector<char>::const_iterator i = cVector.begin(); 
         i != cVector.end(); ++i)
    {
        std::cout << *i;
    }
    std::cout << std::endl;
    std::cout << "Size: " << cVector.size() << std::endl;
    std::cout << "Actual size: " << cVector.capacity() << std::endl;
}

更新:请注意,我使用std::string只是为了让它更C++。您可以继续使用 char[] ,只是您需要将原始作业替换为:

cVector.assign(array, array + strlen(array));

size()给出了向量的长度(实际在其中的元素数,而不是它当前可以容纳的元素数)。您看到的是相同的数字,因为您在向量上调用assign(array, array + MAX_SIZE),这显然会用MAX_SIZE元素填充它。