C++入门(4)动态内存、命名空间、模板
C++ 程序中的内存分为两个部分:
栈:在函数内部声明的所有变量都将占用栈内存。
堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。
new和delete
new 运算符为任意的数据类型动态分配内存
delete 操作符释放它所占用的内存
double* pvalue = NULL; // 初始化为 null 的指针
pvalue = new double; // 为变量请求内存
一维数组
char* pvalue = NULL; // 初始化为 null 的指针
pvalue = new char[20]; // 为变量请求内存
delete [] pvalue; // 删除 pvalue 所指向的数组
二维数组
int **array
// 假定数组第一维长度为 m, 第二维长度为 n
// 动态分配空间
array = new int *[m];
for( int i=0; i
对象同理
Box* myBoxArray = new Box[4];
delete [] myBoxArray; // 删除数组
命名空间
作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。
#include
using namespace std;// 第一个命名空间
namespace first_space{void func(){cout << "Inside first_space" << endl;}
}
// 第二个命名空间
namespace second_space{void func(){cout << "Inside second_space" << endl;}
}
int main ()
{// 调用第一个命名空间中的函数first_space::func();// 调用第二个命名空间中的函数second_space::func();return 0;
嵌套的命名空间
namespace namespace_name1 {// 代码声明namespace namespace_name2 {// 代码声明}
}
using namespace namespace_name1::namespace_name2;
C++模板
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码
函数模板
template ret-type func-name(parameter list)
{
// 函数的主体
}
类模板
template class class-name {
.
}
#include
#include
#include
#include
#include using namespace std;template
class Stack {private:vector elems; // 元素public:void push(T const&); // 入栈void pop(); // 出栈T top() const; // 返回栈顶元素bool empty() const{ // 如果为空则返回真。return elems.empty();}
};template
void Stack::push (T const& elem)
{// 追加传入元素的副本elems.push_back(elem);
}template
void Stack::pop ()
{if (elems.empty()) {throw out_of_range("Stack<>::pop(): empty stack");}// 删除最后一个元素elems.pop_back();
}template
T Stack::top () const
{if (elems.empty()) {throw out_of_range("Stack<>::top(): empty stack");}// 返回最后一个元素的副本return elems.back();
}int main()
{try {Stack intStack; // int 类型的栈Stack stringStack; // string 类型的栈// 操作 int 类型的栈intStack.push(7);cout << intStack.top() <
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
