sb百度一遇到专业问题就掉链子,只能Google了
原问题以及回答
There are two limits, both not enforced by C++ but rather by the hardware.
The first limit (should never be reached) is set by the restrictions of the size type used to describe an index in the array (and the size thereof). It is given by the maximum value the system’s std::size_t can take. This data type is large enough to contain the size in bytes of any object
The other limit is a physical memory limit. The larger your objects in the array are, the sooner this limit is reached because memory is full. For example, a vector of a given size n typically takes multiple times as much memory as an array of type vector (minus a small constant value), since int is usually bigger than char. Therefore, a vector may contain more items than a vector before memory is full. The same counts for raw C-style arrays like int[] and char[].
Additionally, this upper limit may be influenced by the type of allocator used to construct the vector because an allocator is free to manage memory any way it wants. A very odd but nontheless conceivable allocator could pool memory in such a way that identical instances of an object share resources. This way, you could insert a lot of identical objects into a container that would otherwise use up all the available memory.
Apart from that, C++ doesn’t enforce any limits