vector分配内存,c++示例
时间: 2024-07-22 11:01:42 浏览: 47
在 C++ 中,`std::vector` 是一种动态数组容器,它允许你在运行时动态地添加或删除元素。当你创建一个 `vector` 对象时,它会自动在堆上分配内存来存储其元素。下面是一个简单的 C++ 示例:
```cpp
#include <iostream>
#include <vector>
int main() {
// 创建一个能容纳 5 个整数的 vector
std::vector<int> vec(5);
// 内存分配是在构造函数完成时发生的,此时它为 5 个整数预留了空间
std::cout << "Memory allocated for the vector: " << vec.capacity() * sizeof(int) << " bytes.\n";
// 当需要添加元素时,vector会在必要时自动调整大小
vec.push_back(10);
vec.push_back(20);
// 可以直接访问元素,比如索引从 0 开始
std::cout << "First element is: " << vec[0] << "\n";
return 0;
}
```
在这个例子中,当 `vec` 被创建时,并未立即填充所有元素,而是预留了一定的空间。当你使用 `push_back` 或其他类似的方法添加元素时,如果当前容量不足,`vector` 将自动扩大它的内部数组,然后分配更多内存。
相关问题
vector at c++示例
vector是C++标准库中的一个容器,它能够动态地调整自己的大小。vector中的元素是连续存储的,可以通过下标或迭代器来访问。at()函数是vector容器提供的一个成员函数,用于返回指定位置的元素,并进行边界检查。
以下是一个vector at c++的示例:
```
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> myVector = {1, 2, 3, 4, 5};
// 访问元素
cout << "Element at index 2: " << myVector.at(2) << endl;
// 边界检查
try {
cout << "Element at index 10: " << myVector.at(10) << endl;
} catch (const std::out_of_range& e) {
cout << "Out of range error: " << e.what() << endl;
}
return 0;
}
```
输出结果为:
```
Element at index 2: 3
Out of range error: vector::_M_range_check: __n (which is 10) >= this->size() (which is 5)
```
vector动态分配内存
在C++ STL中,vector是一个动态数组,它可以根据需要自动调整大小。当我们向vector中添加元素时,如果当前的容量不足以容纳新元素,vector会自动分配更大的内存空间,并将原有的元素复制到新的内存空间中。这个过程称为动态分配内存。
下面是一个示例代码,演示了如何使用vector进行动态分配内存:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec; // 创建一个空的vector
// 向vector中添加元素
for (int i = 0; i < 10; i++) {
vec.push_back(i);
}
// 打印vector中的元素
for (int i = 0; i < vec.size(); i++) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
运行上述代码,输出结果为:
```
0 1 2 3 4 5 6 7 8 9
```
在这个示例中,我们创建了一个空的vector,并使用`push_back()`函数向其中添加了10个整数。由于初始时vector的容量为0,所以在添加元素时会动态分配内存。当添加第一个元素时,vector会分配一块内存来存储这个元素;当添加第二个元素时,vector会分配一块更大的内存,并将原有的元素复制到新的内存空间中;以此类推,直到所有元素都添加完毕。
需要注意的是,当vector的容量不再需要增加时,为了节省内存空间,vector可能会释放一部分内存。这个过程是自动进行的,我们无需手动释放内存。
阅读全文