关闭

STL - 容器共性机制研究

标签: stl容器共性机制
449人阅读 评论(0) 收藏 举报
分类:

C++模板是容器的概念。


理论提高:所有容器提供的都是值(value)语意,而非引用(reference)语意。容器执行插入元素的操作时,内部实施拷贝动作。所以STL容器内存储的元素必须能够被拷贝(必须提供拷贝构造函数)。

除了queue与stack外,每个容器都提供可返回迭代器的函数,运用返回的迭代器就可以访问元素。
通常STL不会丢出异常。要求使用者确保传入正确的参数。
每个容器都提供了一个默认构造函数跟一个默认拷贝构造函数。
如已有容器vecIntA。
vector<int> vecIntB(vecIntA); //调用拷贝构造函数,复制vecIntA到vecIntB中。
与大小相关的操作方法(c代表容器):
c.size(); //返回容器中元素的个数
c.empty(); //判断容器是否为空
比较操作(c1,c2代表容器):
c1 == c2 判断c1是否等于c2
c1 != c2 判断c1是否不等于c2
c1 = c2 把c2的所有元素指派给c1

demo

#include <iostream>
#include <cstdio>
#include <map>
#include <algorithm>
#include <vector>

using namespace std;

class Person
{
public:
	Person(char *_name, int _age) {
		name = new char[strlen(_name) + 1];
		strcpy(name, _name);
		age = _age;
	}

	~Person() {
		if (name != NULL) {
			delete[] name;
			name = NULL;
			age = 0;
		}
	}

	Person(const Person &obj) {
		name = new char[strlen(obj.name) + 1];
		strcpy(name, obj.name);
		age = obj.age;
	}

	Person &operator=(const Person &obj) {
		// 先把原先的内存释放掉
		if (name != NULL) {
			if (name != NULL) {
				delete[] name;
				name = NULL;
				age = 0;
			}
		}

		// 根据obj的大小分配内存
		name = new char[strlen(obj.name) + 1];
		strcpy(name, obj.name);
		age = obj.age;
		return *this;
	}

	void printPerson()
	{
		cout << "name: " << name << "\tage: " << age << endl;
	}

protected:
private:
	char *name;
	int age;
};

void containerMap()
{
	Person p1("lucifer", 23);
	p1.printPerson();

	vector<Person> v1;
	v1.push_back(p1);
	v1[0].printPerson();
}

int main()
{
	containerMap();

	return 0;
}

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

容器共性机制研究

理论提高: 所有容器提供的都是值(value)语意,而非引用(reference)语意。容器执行插入元素的操作时,内部实施拷贝动作。 所以STL容器内存储的元素必须能够被拷贝(必须提供拷贝构造函数)。  除了queue与stack外,每个容器都提供可返回迭代器的函数,运用返回的迭代器就可...
  • bbs375
  • bbs375
  • 2016-09-30 08:22
  • 103

C++ 学习笔记:STL 容器一些底层机制

vector 容器 list 容器 deque 容器 stack queue heap priority_queue set 和 multiset 容器 map 和 multimap 容器 hash_set 和 hash_multiset 容器 hash_map 和 hash_multimap 容器
  • TQH_Candy
  • TQH_Candy
  • 2016-08-31 18:36
  • 1286

STL学习笔记-容器的共性机制

容器的共通的能力: (1) C++容器都是使用C++模板进行实现的。 (2) 理论提高:所有容器提供的都是值语意,而不是引用语意。容器执行插入元素的操作时,内部实现的是拷贝动作。 所以STL容器内部存储的元素必须能够被拷贝,即必须提供拷贝构造函数。即提供无参构造函数、拷贝构造函数、重载=操作符...
  • tangwei2014
  • tangwei2014
  • 2015-10-21 23:08
  • 1228

多年来,STL容器的使用总结!

第1条:慎重选择容器类型。 标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。 非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一“重型”string。 ...
  • shaderdx
  • shaderdx
  • 2017-02-20 16:31
  • 494

STL中各种容器的简单特点

(1) vector 内部数据结构:数组。 随机访问每个元素,所需要的时间为常量。 在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化。 可动态增加或减少元素,内存管理自动完成,但程序员可以使用reserve()成员函数来管理内存。 vect...
  • cc946079647
  • cc946079647
  • 2014-07-17 13:32
  • 1108

STL之七:STL各种容器的使用时机详解

C++标准程序库提供了各具特长的不同容器。现在的问题是:该如何选择最佳的容器类别?下表给出了概述。 但是其中有些描述可能不一定实际。例如:如果你需呀处理的元素数量很少,可以虎落复杂度,因为线性算法通常对元素本身的处理过程比较快,这种情况下,“显性复杂度搭配快速的元素处理”要比“对数复杂度搭...
  • longshengguoji
  • longshengguoji
  • 2013-01-28 20:59
  • 3086

STL中的关联式容器的共性

1、 代码如下: /* * multiset_1.cpp * * Created on: 2013年8月6日 * Author: Administrator */ #include #include using namespace std; template voi...
  • caihongshijie6
  • caihongshijie6
  • 2013-08-06 20:24
  • 832

STL容器的适用情况和缺点

一.各种容器的特性 vector 典型的序列容器,C++标准严格要求次容器的实现内存必须是连续的,唯一可以和标准C兼容的stl容器,任意元素的读取、修改具有常数时间复杂度,在序列尾部进行插入、删除是常数时间复杂度,但在序列的头部插入、删除的时间复杂度是O(n),可...
  • qq_14898543
  • qq_14898543
  • 2016-05-12 09:56
  • 527

STL常用容器详细解析

这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、stac)
  • ahuang1900
  • ahuang1900
  • 2014-08-28 19:33
  • 1707

STL中序列式容器的共性

代码如下: /* * vector_1.cpp * * Created on: 2013年8月6日 * Author: Administrator */ #include #include #include using namespace std; template...
  • caihongshijie6
  • caihongshijie6
  • 2013-08-06 17:28
  • 1196
    个人资料
    • 访问:400458次
    • 积分:7981
    • 等级:
    • 排名:第3033名
    • 原创:401篇
    • 转载:30篇
    • 译文:11篇
    • 评论:87条
    博客专栏