数组键是否确定C ++中的数组大小?

时间:2009-11-06 04:18:14

标签: c++ arrays

我为数组中的对象存储一些设置。对象的id用作键。 id从100000开始然后上升。如果我要为id为100 000的对象输入数据,cpp会自动创建从0开始的99999个空白键条目吗?

5 个答案:

答案 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]

我希望你明白......