- 浏览: 443552 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
su6838354:
我有点疑问啊,thread1中的i自增的慢的话,thread2 ...
浅析pthread_cond_wait -
zeronever:
请问pthread_cond_signal有解锁操纵吗?我在p ...
浅析pthread_cond_wait -
paladin1988:
你这帖子真心不错。。
浅谈bitmap算法 -
parabellum_sky:
昨天还有个姑娘让我去考我说会考虑
个人日志
Vector模板
这几天自己写了一个Vector模板,但是遇到一些问题:如何把.h和.cpp文件分开来写?模板的语法是什么?
1.下面是在一个.cpp文件中实现模板
#include <iostream> using namespace std; template <typename Object> class Vector { public: //explicit Vector( int initSize = 0 ) // : theSize( initSize ), theCapacity( initSize + SPARE_CAPACITY ) //{ objects = new Object[ theCapacity ]; } //explicit Vector(int initSize = 0) Vector(int initSize = 0) { theSize = initSize; theCapacity = initSize + SPARE_CAPACITY; objects = new Object[ theCapacity ]; } Vector( const Vector & rhs ) : objects( NULL ) { cout << "Call Copy constructor!"<< endl; operator=( rhs ); } ~Vector( ) { delete [ ] objects; } const Vector & operator= ( const Vector & rhs ) { cout << "Call Operator Constructor!" << endl; if( this != &rhs ) { delete [ ] objects; theSize = rhs.size( ); theCapacity = rhs.theCapacity; objects = new Object[ capacity( ) ]; for( int k = 0; k < size( ); k++ ) objects[ k ] = rhs.objects[ k ]; } return *this; } void resize( int newSize ) { if( newSize > theCapacity ) reserve( newSize * 2 + 1 ); theSize = newSize; } void reserve( int newCapacity ) { if( newCapacity < theSize ) return; Object *oldArray = objects; objects = new Object[ newCapacity ]; for( int k = 0; k < theSize; k++ ) objects[ k ] = oldArray[ k ]; theCapacity = newCapacity; delete [ ] oldArray; } Object & operator[]( int index ) { return objects[ index ]; } const Object & operator[]( int index ) const { return objects[ index ]; } bool empty( ) const { return size( ) == 0; } int size( ) const { return theSize; } int capacity( ) const { return theCapacity; } void push_back( const Object & x ) { if( theSize == theCapacity ) reserve( 2 * theCapacity + 1 ); objects[ theSize++ ] = x; } void pop_back( ) { theSize--; } const Object & back ( ) const { return objects[ theSize - 1 ]; } typedef Object * iterator; typedef const Object * const_iterator; iterator begin( ) { return &objects[ 0 ]; } const_iterator begin( ) const { return &objects[ 0 ]; } iterator end( ) { return &objects[ size( ) ]; } const_iterator end( ) const { return &objects[ size( ) ]; } enum { SPARE_CAPACITY = 16 }; private: int theSize; int theCapacity; Object * objects; }; int main() { Vector<int> Temp(10); Vector<int> b; b = Temp; Temp.push_back(10); Temp.push_back(20); Temp.reserve(4); cout << Temp.size() << endl; return 0; }
但是我想分开来写却遇到很多错误。
在Essential C++ 中看到要这样写:
2.分开.h和.cpp实现
// #ifndef VECTOR_H_ #define VECTOR_H_ template <typename Object> class Vector { public: enum{SPACE_CAPACITY =16}; Vector(int ); Vector(const Vector & rhs); ~Vector(); //const Vector & operator= (const Vector & rhs); Vector & operator= (const Vector & rhs); void resize(int newSize); void reserve(int newCapacity); Object & operator[](int index); const Object & operator[](int index)const; bool empyt()const; Object size() const; Object capacity() const; void pop_back(); void push_back(const Object & x); const Object & back() const; private: int theSize; int theCapacity; int *objects; }; #endif
//2011 06 28 #include <iostream> using namespace std; #include "Vector.h" template <typename Object> inline Vector<Object>::Vector(int initSize = 0):theSize(initSize),theCapacity(initSize + SPACE_CAPACITY) { objects = new Object[theCapacity]; } //Copy constructor template <typename Object> inline Vector<Object>::Vector(const Vector & rhs):objects(NULL) { operator=(rhs); } //Deconstructor template <typename Object> Vector<Object>::~Vector() { delete [] objects; } //assignment Constructor template <typename Object> Vector<Object> & Vector<Object>::operator=(const Vector & rhs) { cout <<"Call operator Constructor!"<< endl; if(this != &rhs) { delete[] objects; theSize = rhs.size(); theCapacity = rhs.capacity(); objects = new Object[capacity()]; //synamical allocate memory for(int k = 0; k < size();k++) objects[k] = rhs.objects[k]; } return *this; } template<typename Object> void Vector<Object>::resize(int newSize) { if(newSize > theCapacity) reserve(2*newSize + 1); theSize = newSize; } template<typename Object> void Vector<Object>::reserve(int newCapacity) { if(newCapacity < theSize) return; Object *oldArray = objects; objects = new Object[ newCapacity ]; for( int k = 0; k < theSize; k++ ) objects[ k ] = oldArray[ k ]; theCapacity = newCapacity; delete [ ] oldArray; } // template <typename Object> Object & Vector<Object>::operator [](int index) { return objects[index]; } // template <typename Object> const Object & Vector<Object>::operator [](int index) const { return objects[index]; } template<typename Object> bool Vector<Object>::empyt()const { return size() == 0; } template <typename Object> Object Vector<Object>::size() const { return theSize; } template <typename Object> Object Vector<Object>::capacity() const { return theCapacity; } template<typename Object> void Vector<Object>::push_back(const Object & x) { if(theSize == theCapacity) reserve(2*theSize +1); objects[theSize++] = &x; } template <typename Object> void Vector<Object>::pop_back() { theSize--; } template <typename Object> const Object & Vector<Object>::back() const { return objects[theSize - 1]; } int main(void) { Vector<int> Temp(10); return 0; }
发表评论
-
Google编程风格
2012-04-01 17:05 1138Google编程风格(自己整 ... -
VS2008快捷键的设置
2012-02-02 13:43 2689VS2008快捷键的设置 VS2008默认的快捷键和VC++ ... -
LINK : fatal error LNK1000: Internal error during IncrBuildImage
2011-12-16 17:07 1249Win7安vc2008编译报LINK : fatal erro ... -
volatile关键字(摘自:百度百科)
2011-12-16 14:59 747volatile关键字[align=center][/alig ... -
InterlockedIncrement
2011-12-16 14:44 2215InterlockedIncrement[align=cent ... -
关键词explicit
2011-12-10 20:32 872关键词explicit[size=large][/size][ ... -
Souce Insight 设置
2011-12-09 17:16 2026Souce Insight 设置 【问题】 Source I ... -
VS2008下Boost库的安装编译下载boost库
2011-11-09 19:19 2082下载boost库 (最好去官网下,一般有SGI(GCC+用的较 ... -
C++多态技术的实现和反思(转)
2011-10-17 17:05 858面向对象技术最早出现于1960年代的Simula 67系统,并 ... -
memmove and memcpy
2011-07-31 13:11 1222memmove and memcpy 字符串的拷贝函数mem ... -
Polymorphism & Virtual Function
2011-07-25 21:38 906Polymorphism & Virtual Func ... -
C++ 不要重新定义继承的非虚函数
2011-07-18 14:15 1322不要重新定义继承的非虚函数 如果基类和派生类有相同的非虚函数 ... -
C++ 虚函数表解析
2011-07-14 21:02 1025C++ 虚函数表解析 为什么在C++机制里要有虚函数表?虚函 ... -
C++ 默认构造函数
2011-07-14 11:39 3777C++ 默认构造函数 一直 ... -
尽量使用const
2011-07-12 10:51 1145尽可能的使用const const: ... -
Operator=
2011-07-11 21:54 982Operator= 赋值构造函数 ... -
虚析构函数
2011-07-11 10:43 1221虚析构函数 一 、为何要单独讨论虚析构函数?虚函数在类中到底 ... -
初始化列表和声明顺序之间的关系
2011-07-11 09:18 1484初始化列表和声明的顺序之间的关系 类中数据成员的声明顺序和初 ... -
初始化函数列表和构造函数内赋值之区别
2011-07-10 17:05 4542初始化函数列表和构造 ... -
传值和传引用的区别
2011-07-10 15:30 2413传值和传引用的区别 在C语言中,大都是通过值传递,C++也是 ...
相关推荐
c++写的k均值算法 里面有部分的输出调试语句 用了很多vector模板操作
运用stl编写的学生管理系统,在百度上拿过来的~
C++中的模板类`std::vector`是标准模板库(STL)的一部分,它提供了一个动态数组的功能,允许程序员在运行时改变数组的大小。`vector`类在内存管理上非常高效,它会自动处理内存分配和释放,使得在处理大量数据时...
vector 是 C++ 标准模板库中的一个多功能的模板类和函数库,能够操作多种数据结构和算法。它是一个容器,能够存放各种类型的对象,简单地说,vector 是一个能够存放任意类型的动态数组,可以动态改变大小。 一、...
C++中的`std::vector`是一个非常重要的容器,它提供了动态数组的功能,允许在运行时改变大小。在本例中,我们讨论的是一个简易版的模板类`vector`,它是对标准库`std::vector`的一个简化实现。下面将详细解释这个...
编程语言:C++ 实现功能:自定义实现的Vector类 参考方向:C++泛化模板编程 C++初学者参考学习
C++中的`std::vector`是一个非常重要的标准模板库(STL)容器,它提供了一种动态数组的功能。在C++编程中,`vector`经常用于处理动态大小的序列数据,其内部存储空间是连续的,这使得随机访问元素非常高效。下面我们将...
首先,`std::vector`是一个模板类,它的实例可以存储任意类型的元素。例如,`vector<int>`表示一个存储整数的`std::vector`,而`vector<string>`则用于存储字符串。要使用`std::vector`,我们需要包含`<vector>`...
C++ vector 是一种动态数组,提供了一个容器类模板,用于存储和操作数据。标准库中,vector 是一个类模板,需要#include <vector>头文件来使用。vector 的存储空间是连续的,且可以自动调整大小以适应存储的数据。 ...
在C++编程语言中,标准模板库(Standard Template Library,简称STL)是不可或缺的一部分,它提供了一系列高效、可重用的数据结构和算法。STL中的`vector`是其中一个核心容器,它允许程序员动态地存储、管理和操作一...
在 C++ 语言标准化以后 (1998),以及 VC++ 6.0 出世以后,提供了标准的 ::std::vector<> 模板,基本上在任何方面都要优于 CArray。Microsoft 由于要支持老的程序,因 此一直保留了 CArray,但显然并没有按照新的思想...
c++ vector用法 C++内置的数组支持容器的机制,但是它不支持容器抽象的语义。要解决此问题我们自己实现这样的类。在标准C++中,用容器向量(vector)实现。容器向量也是一个类模板。 标准库vector类型使用需要的...
8. **模板别名**:C++11引入的`using`关键字可以创建模板的别名,简化模板的使用和理解,例如`using Vector = std::vector<int>`。 9. **模板模板参数**:类模板可以接受其他类模板作为参数,例如`std::vector...
Vector 是 C++ 标准模板库 (STL) 中的一种容器,它可以被理解为一种能够自动管理内存的动态数组。Vector 支持随机访问,并且在内部通过一个连续的内存空间来存储数据,这使得它在插入、删除操作上不如链表高效,但在...
在C++编程语言中,`std::vector`是标准模板库(STL)中的一种容器,它提供了动态数组的功能。这个容器允许我们存储、访问和管理元素的集合,并且它的大小可以在运行时动态改变。`vector`是C++程序员日常开发中不可或缺...
C++模板和STL库是C++编程语言中的两个核心特性,它们极大地提高了代码的复用性和效率。本文将深入探讨这两个主题,并提供丰富的实践应用示例。 首先,我们来理解C++模板。模板是C++的一个强大工具,它允许程序员...
在标题“test_vector_c++vector_vector_vectorc++_”中,我们可以推测这是一个关于使用`std::vector`来处理多维数据的示例,特别是涉及到三层嵌套的`vector`使用。在描述中提到的“创建vector数组”,指的是创建一个...
在C++编程中,`std::vector`是一个常用的容器,用于存储同类型的元素序列。然而,在处理数据时,我们有时需要去除其中的重复项。这篇博客文章“实现从vector中过滤重复的数据”提供了几种方法来解决这个问题。我们将...
- Visual C++ 6.0的模板库包含了一些标准库的实现,如STL(Standard Template Library),它包括容器(如vector、list、map等)、迭代器、算法和函数对象等。 - STL通过模板实现了高效的数据操作,例如,`std::...
类模板则用于创建泛型类,如`std::vector`和`std::map`,它们可以处理多种数据类型。 1. **模板基础**: - **模板声明**:模板的定义通常以`template <typename T>`开头,其中`T`是一个占位符,代表一个类型。 - ...