向量(以C 为单位)如何具有分配可变大小的元素
How are vectors(in C++) having elements of variable size allocated?
我编写了以下代码,以在竞争性编程网站上接受测试案例。它使用结构case
的矢量input
一次存储给定测试箱的输入,然后一次处理它们(我省略了输入输入的循环并计算输出,因为它们与它们无关问题。)
#include<iostream>
#include<vector>
using namespace std;
struct case{
int n, m;
vector<int> jobsDone;
};
int main(){
int testCase;
cin>>testCase;
vector<case> input;
input.reserve(testCase);
//The rest of the code is supposed to be here
return 0;
}
在编写此代码时,我意识到在元素大小是可变的情况下,input.reserve(t)
的工作(由于结构case
的每个实例也都有可变大小的向量)。实际上,即使我没有明确编写reserve()
语句,该矢量仍然会保留一个微小的elemtns。
在这种特殊情况下,我有以下有关向量input
的问题:
- 在这种情况下,在o(1)中不可能的随机访问是不可能的,因为每个元素的开始位置尚不清楚?
- 当无法计算每个元素的开始位置时,向量
input
将如何管理元素访问?它会将所有条目都放在最大入口的大小上吗? - 我是否应该使用指向
case
实例的指针向量实现cases
?我之所以考虑这一点,是因为如果向量将每个元素填充到一个大小和浪费空间,或者它将每个元素保持到每个元素的位置,并且随机访问并不恒定,因此无论如何,矢量都没有用。
每个对象类型都有固定的大小。这就是sizeof
返回的内容。vector
本身通常将指向对象数组,已分配空间的对象数量以及对象的数量实际包含的指针。这三件事的大小独立于向量中的元素数量。
例如,vector<int>
可能包含:
1)持有数据地址的int *
。
2)A size_t
持有我们分配给
的对象数量的数量3) size_t
保留向量中包含的对象数量。
无论矢量中有多少个对象,这可能会在24个字节左右。这就是sizeof(vector<int>)
将返回的。
相关文章:
- 访问动态分配列表中的元素
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- 是否有具有外部元素分配的序列容器(在 STL 中)?
- C++ 将元素分配给映射值时访问错误
- 如何通过查找迭代器结果分配给一组对的元素
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- c++ 使用动态分配运算符反向数组元素
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 我正在丢失动态分配的数组中的元素
- 如何为包含最多N个元素的std::multiset调用最大数量分配
- 通过动态分配插入列表元素
- 在 CPP 中将元素分配给矢量
- 如何将 50 行和 50 列的二维数组编码为一个为元素随机分配星号的函数?
- 当我尝试将一个向量元素的值分配给另一个向量元素时,为什么我的应用程序会崩溃
- 如何将元素分配给向量?
- 不能直接分配元素 std::array,它说没有运算符"="匹配
- 为什么存储在 STL 向量中的堆栈分配元素C++即使超出范围也仍然处于活动状态
- 在数组中分配元素
- 如何初始化一个固定大小的数组,并在C++11中使用constexpr函数或借助boost来分配元素