11/7/2 STL vector<T> (2)
2011-07-02 11:35
253 查看
1.矢量的容量与大小
容量(capacity)指矢量目前所占据的内存的大小,表示一种存储的能力
大小(size)表示目前矢量的容量中已经使用部分的大小,
vec.size() 返回矢量中元素的个数,如果矢量中只有第0号元素,则size为1
empty() 函数返回一个bool值,是用来判断矢量是否为空(即 size 是否为0)如果为空,则返回true,不为空则返回false
max_size() 函数可能不常用,是用来返回矢量vector<T>最大容量的函数,容量与T类型相关(【疑问】仅与T类型有关?)
resize() 函数重新制定矢量的size,如果指定了更大的size,则用第二参数补全剩余的空间,如果未指定第二参数,int 默认为0, 类类型调用默认构造函数
而如果指定了更小的size,则截取矢量尾部的元素
一个有趣的现象是,在矢量自动增加容量的时候,容量的增加量是原容量的一半。如果原容量为13,则增加6
2.用迭代器遍历矢量的实例
迭代器的类型是vector<T>::iterator
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; } 3.访问矢量中元素以及增删操作
at() 函数类似于 下标访问运算符 [] ,但是当越界的时候 at() 函数会抛出一个 out_of_range 类型的异常
front() 函数可以返回矢量的第一个元素的值,而不是迭代器
back() 函数返回矢量的尾元素的值,而不是迭代器
pop_back() 函数可以删除矢量尾的一个元素,多次操作可以清空矢量
但也可以直接调用 clear() 函数,删除矢量的所有元素,将大小size 置为0,但不改变矢量的容量
insert() 函数的3个版本:
1.insert(iterator , T) 可以用来在迭代器所指位置插入一个T类型对象
2.insert(iterator , int n, T) 用来在迭代器所指的位置插入 n 个 T类型对象
3.insert(iterator ,iterator , iterator ) 用来在第一个迭代器所指的位置,插入第二个迭代器与第三个迭代器之间的序列,注意,第三个迭代器指向要插入的元素序列的最后一个元素的下一个位置
erase() 两个版本:
版本一:一个参数,类型为迭代器,用来删除该迭代器所指位置的元素
版本二:二个参数,类型均为迭代器,用来删除序列,第二个迭代器指元素序列最后一个元素的下一个位置
swap() 交换两个矢量,两个矢量的 T 要相同,交换后,容量,大小,内容均交换(可以理解为是交换名称)
实例:vec1.swap(vec2);
assign() 用另一个序列替代矢量中的 全部 内容,注意,使用该函数,第一步先要删除矢量中的所有内容。 有两个版本。
版本1:assign(iterator , iterator ) 两个迭代器指向一个序列的始末位置,第二个迭代器仍是指末尾元素的下一位, 也可以用常规指针来代替迭代器,注意,第二个指针也是指向序列的末尾元素的下一个位置
版本2:assign(int , T ) 替换为n个T类型元素
容量(capacity)指矢量目前所占据的内存的大小,表示一种存储的能力
大小(size)表示目前矢量的容量中已经使用部分的大小,
vec.size() 返回矢量中元素的个数,如果矢量中只有第0号元素,则size为1
empty() 函数返回一个bool值,是用来判断矢量是否为空(即 size 是否为0)如果为空,则返回true,不为空则返回false
max_size() 函数可能不常用,是用来返回矢量vector<T>最大容量的函数,容量与T类型相关(【疑问】仅与T类型有关?)
resize() 函数重新制定矢量的size,如果指定了更大的size,则用第二参数补全剩余的空间,如果未指定第二参数,int 默认为0, 类类型调用默认构造函数
而如果指定了更小的size,则截取矢量尾部的元素
一个有趣的现象是,在矢量自动增加容量的时候,容量的增加量是原容量的一半。如果原容量为13,则增加6
2.用迭代器遍历矢量的实例
迭代器的类型是vector<T>::iterator
1: for(vector<T>::iterator iter = vec.begin(); iter < vec.end(); iter++)
2: cout<<*iter<<endl;
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; } 3.访问矢量中元素以及增删操作
at() 函数类似于 下标访问运算符 [] ,但是当越界的时候 at() 函数会抛出一个 out_of_range 类型的异常
front() 函数可以返回矢量的第一个元素的值,而不是迭代器
back() 函数返回矢量的尾元素的值,而不是迭代器
pop_back() 函数可以删除矢量尾的一个元素,多次操作可以清空矢量
但也可以直接调用 clear() 函数,删除矢量的所有元素,将大小size 置为0,但不改变矢量的容量
insert() 函数的3个版本:
1.insert(iterator , T) 可以用来在迭代器所指位置插入一个T类型对象
2.insert(iterator , int n, T) 用来在迭代器所指的位置插入 n 个 T类型对象
3.insert(iterator ,iterator , iterator ) 用来在第一个迭代器所指的位置,插入第二个迭代器与第三个迭代器之间的序列,注意,第三个迭代器指向要插入的元素序列的最后一个元素的下一个位置
erase() 两个版本:
版本一:一个参数,类型为迭代器,用来删除该迭代器所指位置的元素
版本二:二个参数,类型均为迭代器,用来删除序列,第二个迭代器指元素序列最后一个元素的下一个位置
swap() 交换两个矢量,两个矢量的 T 要相同,交换后,容量,大小,内容均交换(可以理解为是交换名称)
实例:vec1.swap(vec2);
assign() 用另一个序列替代矢量中的 全部 内容,注意,使用该函数,第一步先要删除矢量中的所有内容。 有两个版本。
版本1:assign(iterator , iterator ) 两个迭代器指向一个序列的始末位置,第二个迭代器仍是指末尾元素的下一位, 也可以用常规指针来代替迭代器,注意,第二个指针也是指向序列的末尾元素的下一个位置
版本2:assign(int , T ) 替换为n个T类型元素
相关文章推荐
- STL(3)---<vector>
- 讨论exe获取dll提供的单例,并获取单例所提供的带有vector<class A>& STL容器的返回值的情况-提供1种解决方法
- &lt;Effective STL&gt;笔记--vector和string
- STL容器中的vector<摘自别人博客>
- STL的vector<string>的初始化方式总结
- 11/7/3 vector<T> 算法<alogrithm>
- 11/7/8 STL 映射容器 map< K , T > 学习笔记
- STL容器之vector<bool>
- vector<string>
- CF 346 B vector<pair> s[100]
- cocos2d-x3.0模版容器详解之一:cocos2d::Vector<T>
- hdu 4941 stl的map<node,int>用法
- 对std::vector<make_pair>中重复元素的删除
- STL map<string,string> 未能从“const std::string”为“const std::_Revranit<_RanIt,_Base> &”推导 模板 参数
- const vector <int> ::iterator和vector <int>::const_iterator有什么不同
- STL(4)----<list>
- &lt;Effective STL&gt;笔记--算法
- vector<struct st_jn_record_plan_week_info> *infoS = &m_PlanInfo[info[i].SubEquId];
- 【C++ STL】算法 <algorithm>中各种算法解析
- shell 十三問? 11) > 與 < 差在哪?