我想我还是不理解 C++ 容器和数组的局限性。根据this post和 this不可能在 STL vector 中存储动态大小的项目。
但是,使用以下代码,我可以动态地重新调整 vector 元素的大小,如果可以在 vector 中包含大小不断变化的项目,那么我会得到预期的结果。
string test = "TEST";
vector<string> studentsV;
for (int i = 0; i < 5; ++i)
{
studentsV.push_back(test);
}
studentsV[2].resize(100);
for (string s : studentsV)
{
cout << s << "end" << endl;
}
结果:
TESTend
TESTend
TEST
end
TESTend
TESTend
我可以将字符串元素的大小调整为任意大小,而且效果很好。我也可以对常规的 C 样式数组执行相同的操作。那么,上面的帖子和我正在做的有什么区别,你能举例说明“动态项目大小”的真正含义吗,因为显然我不明白。
最佳答案
std::string
使用动态内存来增加所存储字符串的大小。这不是那些文章谈论的内容。
他们的意思是,sizeof(std::string)
是常量。表示 std::string
的实际对象将始终具有相同的大小,但它可能会在内存的另一部分进行额外的分配。
std::vector
实际上只是一个动态大小数组的友好包装器。 C 或 C++ 中数组的定义是一个连续的内存块,其中所有元素的大小都相等。
关于C++ 数组和 vector 动态项目大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21080193/