Vector::构造,复制构造,析构

构造函数:

// 构造函数
   Vector(int c = DEFAULT_CAPACITY, int s = 0, T v = 0) //容量为c、规模为s、所有元素初始为v
   { _elem = new T[_capacity = c]; for (_size = 0; _size < s; _elem[_size++] = v); } //s <= c

复制构造函数:

从A数组中为[lo,hi)的左闭右开区间复制数据到vector对象:

template <typename T> //元素类型
void Vector<T>::copyFrom(T const* A, Rank lo, Rank hi) { //以数组区间A[lo, hi)为蓝本复制向量
   _elem = new T[_capacity = 2 * (hi - lo)]; _size = 0; //分配空间,规模清零
   while (lo < hi) //A[lo, hi)内的元素逐一
      _elem[_size++] = A[lo++]; //复制至_elem[0, hi - lo)
}

复制构造函数的几种重载方式:

复制数组A中某一段区间数据到对象

 Vector(T const * A, Rank lo, Rank hi) { copyFrom(A, lo, hi); } //数组区间复制

复制数组A中从0到n的区间数据到对象

   Vector(T const * A, Rank n) { copyFrom(A, 0, n); } //数组整体复制

复制vector中区间为[lo,hi)的数据到Vector对象

   Vector(Vector<T> const & V, Rank lo, Rank hi) { copyFrom(V._elem, lo, hi); } //向量区间复制

赋值vector中从0开始的整片数据

   Vector(Vector<T> const & V) { copyFrom(V._elem, 0, V._size); } //向量整体复制

析构函数

// 析构函数
   ~Vector() { delete [] _elem; } //释放内部空间
时间: 2024-10-17 23:55:57

Vector::构造,复制构造,析构的相关文章

C++ 复制构造和赋值操作符调用

主要是为了记录说明 : class A; A a; A b = a; //这个是调用复制构造函数呢?还是先构造,再调用赋值操作符? 结果是前者. 测试代码: #include <stdio.h> #include <stdlib.h> class A { public: A() { printf("%s\n", "A constructor"); } A(const A &a) { this->data_ = a.data_;

[Swift]Day11:构造过程和析构过程

构造过程和析构过程 阶段构造 Swift 的构造过程分为两个阶段: 第一个阶段,每个存储型属性通过引入自己的构造器来设置初始值. 第二个阶段,在新实例准备使用之前进一步定制存储型属性. 安全检查 在构造的过程中, Swift 会进行四种安全检查. 安全检查 1 指定构造器必须保证它所在类引入的所有属性都必须先初始化完成,之后才能将其它构造任务向上代理给父类中的构造器. 比如下面这段代码就是错误的: class Food { var name: String init(name: String)

C++从array数组向vector向量复制元素的两种方式

#include <iostream> #include <vector> using namespace std; int main() { const int arr_size = 5; int arr[arr_size] = {1,2,3,4,5}; // 第一种方式 vector<int> vec(arr, arr+arr_size); // 从array数组向vector向量复制元素 for (int i=0; i<vec.size(); i++) {

C++我们必须要了解的事之具体做法(1)——构造、复制构造、析构、赋值操作符背后的故事

1. C++默认调用哪些函数 当类中的数据成员类型是trival数据类型(就是原c语言的struct类型)时,编译器默认不会创建ctor. copy ctor.assign operator.dctor. 只有在这些函数被调用时,编译器才会创建他们. 这时候我们要自己创建构造函数,初始化内置数据类型.一般我们不需要复制控制函数,当需要时编译器合成的就很好.一般编译器合成的复制控制函数只是简单的复制成员,若能满足要求就不需要自己写. 当类中含有引用.const成员时,必须在初始化列表中初始化成员.

List::构造、复制构造、析构

构造函数: 默认构造函数: 构造一个空列表: template <typename T> void List<T>::init() { //列表初始化,在创建列表对象时统一调用 header = new ListNode<T>; //创建头哨兵节点 trailer = new ListNode<T>; //创建尾哨兵节点 header->succ = trailer; header->pred = NULL; trailer->pred =

C++深度理解复杂链表的构造复制

#include <iostream> using namespace std; #define Default -1 struct Node { int data; Node *next; Node *other;//这是复杂链表的额外的一个指针,指向一个指定位置的节点. Node(int d = int()) :data(d), next(NULL), other(NULL){} }; class ContexList { public: ContexList() :first(NULL)

C++笔记(11):拷贝控制(拷贝移动,构造赋值,析构)

控制对象拷贝,赋值,析构 拷贝构造函数,移动构造函数 拷贝赋值运算符,移动赋值运算符 析构函数 ------------------------------------------------------------------------------------------------------------------------------------- 1. 拷贝构造函数:参数必须是引用类型&,一般是const的 拷贝构造函数的第1个参数指的是对于自身类类型的引用 2.拷贝赋值运算符:本

构造函数调用和复制构造函数调用

class MyClass{ int value;public: MyClass(int i=10) { value = i; cout << "Constructor called." << endl; } MyClass( MyClass& p) { p.value = 11; value = p.value; cout << "Copy constructor called" << endl; } voi

复制构造和赋值构造的一些尝试

小记:运行环境:vs 2013 c++ win32 console application #include "stdafx.h" #include <iostream> #include <cstdlib> using namespace std; class A{ public: A(){ cout << "A::A()" << endl; } A(A&){ cout << "A::A