容器認識提高

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;
}

 

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