我正在尝试在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()和类似的方法,但是我无法获取最后一个元素的索引。
答案 0 :(得分:2)
当您致电reserve(MAX_SIZE)
时,您会更改容量,因此输出100
就是它应该是的。打印出值的那个循环实际上迭代了100次,但所有剩余的字符都是\0
,因此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 ++ - ish。您可以继续使用char[]
,只需将原始作业替换为:
cVector.assign(array, array + strlen(array));
答案 1 :(得分:1)
size()
给出向量的长度(实际中的元素数,而不是当前可以容纳的元素数)。您看到相同的数字是因为您在向量上调用了assign(array, array + MAX_SIZE)
,这显然会用MAX_SIZE
元素填充它。