用内存动态分配与动态删除的函数模板实现杨辉三角,要求二维数组每行数据长度与该行杨辉三角元素个数相等。测试时输入参数杨辉三角行数,输出杨辉三角、每行元素个数及二维数组占用内存空间C++
时间: 2024-09-21 10:03:05 浏览: 61
在C++中,我们可以使用`vector`容器以及动态内存管理来实现杨辉三角的存储和操作,因为`vector`可以方便地进行动态大小调整。首先,我们需要一个递归函数或循环来生成杨辉三角的元素,然后使用`vector`作为底层存储。
这是一个简单的模板函数实现:
```cpp
#include <iostream>
#include <vector>
template<int N> void printTriangle(const std::vector<std::vector<int>>& triangle) {
for (int i = 0; i <= N; ++i) {
for (int j = 0; j <= i; ++j) {
std::cout << triangle[i][j] << " ";
}
std::cout << std::endl;
}
}
std::vector<std::vector<int>> generateTriangle(int n) {
std::vector<std::vector<int>> triangle(n + 1, std::vector<int>(n + 1));
triangle[0][0] = 1;
for (int row = 1; row < n; ++row) {
triangle[row][0] = triangle[row - 1][row];
triangle[row][row] = triangle[row - 1][row - 1];
// 使用组合公式计算其他位置的值
for (int col = 1; col < row; ++col)
triangle[row][col] = triangle[row - 1][col - 1] + triangle[row - 1][col];
}
return triangle;
}
int main() {
int numRows;
std::cout << "请输入杨辉三角的行数: ";
std::cin >> numRows;
auto triangle = generateTriangle(numRows);
printTriangle(triangle);
// 计算每行元素个数
int elementCountPerRow = triangle[numRows].size();
std::cout << "每行元素个数: " << elementCountPerRow << std::endl;
// 计算二维数组占用的内存空间(假设每个整型占4字节)
size_t memorySize = triangle.numel() * sizeof(int); // numel()返回总的元素数量
std::cout << "二维数组占用内存空间: " << memorySize / (1024 * 1024) << " MB" << std::endl;
return 0;
}
```
在这个示例中,我们首先询问用户输入行数,然后生成对应的杨辉三角并打印出来。同时,我们也计算了每行元素的数量,并基于假设每个整数占4字节,计算了二维数组占用的内存空间(以MB为单位)。请注意,实际内存占用可能会因编译器优化等因素而略有差异。
阅读全文