容器认识提高

1、容器中缓存了用户的节点

2、节点的类要保证节点能够插入到容器中,一般节点类需要提供无参构造函数、拷贝构造函数、重载operator=操作符

3、容器是值语意,而非引用语意 ,容器执行插入操作时,内部执行拷贝动作,所以stl容器中存储的元素必须能够被拷贝。

4、出现指针变量时要考虑到避免野指针的出现,因此类的内部必须提供拷贝构造函数和重载等号(operator=)操作符。

5、除了queue与stack外,每个容器都提供可返回迭代器的函数,用返回的迭代器可以访问元素。

6、STL不会抛出异常,要保证传入的参数正确

7、每个容器提供了一个默认构造函数和拷贝构造函数

各个容器的使用比较

  vector deque list set multiset map multimap
典型内存结构 单端数组 双端数组 二叉树 二叉树 二叉树 二叉树 二叉树
可随机存取 key(是)
元素搜索速度 非常慢 key(快) key(快)
快速安插移除 尾端 头尾两端 任何位置        
class Teacher
{
public:
	Teacher(const char *name,int age)
	{
		m_name = new char[strlen(name) + 1];
		strcpy(m_name, name);
		m_age = age;
	}
	~Teacher()
	{
		if (m_name != NULL)
		{
			delete[] m_name;
			m_name = NULL;
			m_age = 0;
		}
	}

	Teacher(const Teacher &obj)
	{
		m_name = new char[strlen(obj.m_name) + 1];
		strcpy(m_name, obj.m_name);
		m_age = obj.m_age;
	}

	Teacher& operator=(const Teacher &obj)
	{
		if (m_name != NULL)
		{
			delete[] m_name;
			m_name = NULL;
			m_age = 0;
		}

		m_name = new char[strlen(obj.m_name) + 1];
		strcpy(m_name, obj.m_name);
		m_age = obj.m_age;

		return *this;
	}

public:
	void PrintT()
	{
		cout << m_name << " " << m_age << endl;
	}

private:
	char	*m_name;
	int		m_age;
};


int main()
{
	Teacher t1("zhangsan", 22);

	vector<Teacher> v1;
	v1.push_back(t1);
	
	vector<Teacher>::iterator it = v1.begin();
	it->PrintT();


	system("pause");
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章