我为数组中的对象存储一些设置。对象的id用作键。 id从100000开始然后上升。如果我要为id为100 000的对象输入数据,cpp会自动创建从0开始的99999个空白键条目吗?
答案 0 :(得分:5)
创建数组时确定数组大小。
要访问索引为100 000的对象,您需要至少包含该数量的数组,这样才能回答您的问题。
如果阵列较小,您将在
访问内存数组开始地址+(索引*对象 大小)
这不是一件好事。例如。以下将打印一些数据,但它是一个存储在内存中的数据,它在数组之外(不是一件好事):
string arr[3];
cout << arr[5] << endl;
假设您正在谈论标准数组:
string arr[10];
编译时指定了数组的大小,例如你不能这样做:
string arr[]; // this will fail to compile, no size specified
但你这样做:
string arr[] = {"1","2","3"}; // array size is 3
string arr1[3]; // array size is 3
string arr2[3] = {"1"}; // array size is 3
如果你想为对象映射额外的参数,最好使用std :: map,如:
class person {};
std::map<person*,int> PersonScore;
这假设附加参数在逻辑上不是对象的一部分,否则你只需将它们添加到对象中。
答案 1 :(得分:2)
也许你想要的东西:
class ArrayPlus100k {
Item underlyingArray[NUM_ELEMENTS];
public:
Item& operator [] (int i) { return underlyingArray[i-100000]; }
// etc.
}
答案 2 :(得分:1)
如果你真的是指一个数组,并且按键表示索引,那么从索引中减去100,000将为你提供一个基于零的数组索引。没有未使用的条目。
答案 3 :(得分:0)
可能有比平面阵列更好的容器。选择正确的数据结构取决于您要做的事情。如果使用密钥存储对象,则可能需要使用std::map<key, value>
。
完成取决于您选择使用的数据结构。如果使用地图,则只有您插入的项目会占用内存空间。如果使用new
来分配实际数组,那么您将只想为要存储的项目分配足够的空间。在这种情况下,通过减去100,000来调整索引。
答案 4 :(得分:-2)
不,它不会创建0-99999,而是从100000开始到你的数组大小。
例如,如果您声明以下内容:
int arr[5];
从arr[2]
开始,您最多可以存储arr[7]
。
我希望你明白......