C++ 数组和 vector 动态项目大小

标签 c++ arrays vector stl

我想我还是不理解 C++ 容器和数组的局限性。根据this postthis不可能在 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/

相关文章:

php - 将输入数组形成到 MySQL DB

c++ - Bjarne Stroustrup Book - vector 和 For 循环 - 不起作用

c++ - 迭代器和 vector 的段错误

c++ - 从管道读取随机失败

C++循环遍历结构 vector

c++ - 使用预处理器和函数指针原型(prototype)创建函数

c++ - qt form fullscreen 有时会越过 ubuntu 顶部 Pane ,有时不会

javascript - 如何在 JavaScript 中对这个对象数组进行分组或合并?

arrays - MATLAB:将行追加到数组而不处理整个数组

c++ - 将 cuda 推力与数组一起使用而不是 vector 到 inclusive_scan