简单例子
vectorv1={1,3,5,7,9,12}; vector v2={1,3,9}; vector v3={1,3,5,7}; vector v4={1,3,5,7,9,12}; v1 resize的用法 resize用来改变容器的大小,resize不支持resize。顺序容器优先对容器的末尾进行 *** 作。
//list泛指顺序容器 list容器的 *** 作可能会使得迭代器失效ilist(10,42); // 10个值为42的int; ilist.resize(15);//在末尾添加5个0 list.resize(25,-1);//在末尾添加10个-1(原有的值不发生变化) list.resize(5);//删除后20个元素 不同容器的不同 *** 作对迭代器有不同的效果。
vector /string deque list/forward_list 添加若存储空间重新分配,则指向容器的迭代器,指针和引用失效。否则仍有效.在首尾之外添加元素会导致迭代器,指针引用均失效。否则只有迭代器失效迭代器,指针,引用仍有效。(因为是链式结构) 删除指向删除位置之前的迭代器,指针,引用仍有效。(尾后迭代器总是失效)在首尾之外的位置进行删除 *** 作,会使所有迭代器,指针引用均失效。 删除首尾元素,则非删除位置的不失效。指向非删除位置的迭代器,指针,引用仍有效 容器的容量vetcor将元素连续存储,为了支持快速随机访问。所以vector添加新元素时会分配比需求空间更大的内存空间作为备用。所以vector每次分配内存空间时都要移动所有的元素。(但还是比list和deque快。)
管理容量的成员函数
capacity和reserve不适用于deque. c.shrink_to_fit(); 将capacity减少到和size()相同 c.capacity(); 不重新分配内存空间,c可以保存多少元素。 c.reserve(n); 分配n个元素的内存空间(但不实际添加元素)。 只有当前内存小于n个元素的内存的时候才会起作用reserve只能增加容器的内存空间,不改变元素数量,不能减少容器的内存空间。
resize只改变元素数量,但不改变容量,所以也不能减少容器的内存空间capacity表示当前内存空间能保存多少元素。
string 额外 *** 作
size表示已保存了多少元素。除了顺序容器通用的 *** 作,string提供一些额外的 *** 作.
1.构造
string s(cp,n); cp是字符数组 n是指前n个字符的拷贝 string s(s2,pos2); stirng.s2从下标pos2开始的拷贝。pos22.分割
string("hello world"); s.substr(0,5); hello s.substr(6); world s.substr(6,11); world s.substr(12); out_of_range异常3.修改
string的insert和erase可接受下标 s.insert(pos,5,'!') 在s[pos]*之前*添加五个感叹号 s.erase(s.size()-5,5); 删除最后五个字符 insert和assign可接受c风格字符数组 const char*cp="Stately,plump BUCK"; s.assign(cp,7); s赋值cp的前七个字符 s.insert(s,size(),cp+7); 将前七个字符插入s[size]之前 append和replace string定义的两个额外成员函数 s.insert(s.size(),"world"); s.append("world"); 两者等价 s.erase(11,3); s.insert(11,"5th"); 从11开始删除三个字符并插入5th 等价于 s.replace(11,3,"5th");欢迎分享,转载请注明来源:内存溢出
评论列表(0条)