C++:STL常用函数模块总结(vector)
来源:互联网 发布:智能课程表软件 编辑:程序博客网 时间:2024/05/16 17:22
所有资料来源于http://www.cplusplus.com/reference/,至于STL不介绍了,想了解的童鞋们直接百度么,这里只总结常用模块的介绍和用法
vector容器
相当于可变数组,相比于数组占用更多的空间(额外空间以备扩容使用),和数组一样直接访问元素。但是在中间位置(不是末尾)使用插入操作和删除操作时表现的不是很好。
使用时添加:
#include <vector>using namespace std; //不添加这句时,使用vector的成员需要加前缀std::
定义方法1:
#include <iostream>#include <vector>int main (){ std::vector<int> first; // 空int型vector std::vector<int> second (4,100); // 四个int型数据每个为100 std::vector<int> third (second.begin(),second.end()); // 通过指针复制second std::vector<int> fourth (third); // 通过复制函数复制third // 指针构造器也可以适用于数组中: int myints[] = {16,2,77,29}; std::vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) ); std::cout << "The contents of fifth are:"; for (std::vector<int>::iterator it = fifth.begin(); it != fifth.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; std::vector<int> myints2 = {1,2,3,4,5}; //c99中不支持此定义 c11支持 std::cout << "The contents of myints2 are:"; for(int i = 0; i < myints2.size(); i++) printf("%d",myints2[i]); return 0;}
output: The contents of fifth are: 16 2 77 29
The contents of fifth are: 12345
定义方法2
#include <iostream>#include <vector>int main (){ std::vector<int> foo (3,0); std::vector<int> bar (5,0); bar = foo; foo = std::vector<int>(); std::cout << "Size of foo: " << int(foo.size()) << '\n'; std::cout << "Size of bar: " << int(bar.size()) << '\n'; return 0;}
output: Size of foo: 0
Size of bar: 3
基本操作
1、vector::size
:返回当前元素数量
2、vector::begin
:返回指向第一个元素的指针
3、vector::end
:返回指向最后一个元素的指针
4、vector::push_back(para)
:在末尾添加元素para
5、vector::pop_back
:删除末尾的元素
6、vector::empty()
:如果容器元素容量为空,返回真,反之返回假
示例程序1:
#include <iostream> // std::cout#include <vector> // std::vector, std::begin, std::endint main () { int foo[] = {10,20,30,40,50}; std::vector<int> bar; //迭代foo,将内容插入bar for (auto it = std::begin(foo); it!=std::end(foo); ++it) bar.push_back(*it); // 迭代bar,打印内容 std::cout << "bar contains:"; for (auto it = std::begin(bar); it!=std::end(bar); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0;}
bar contains: 10 20 30 40 50
示例程序2
#include <iostream>#include <vector>int main (){ std::vector<int> myints; std::cout << "0. size: " << myints.size() << '\n'; for (int i=0; i<10; i++) myints.push_back(i); std::cout << "1. size: " << myints.size() << '\n'; myints.insert (myints.end(),10,100); std::cout << "2. size: " << myints.size() << '\n'; myints.pop_back(); std::cout << "3. size: " << myints.size() << '\n'; return 0;}
output:
0. size: 01. size: 102. size: 203. size: 19
示例程序3
#include <iostream>#include <vector>int main (){ std::vector<int> myvector; int sum (0); for (int i=1;i<=10;i++) myvector.push_back(i); while (!myvector.empty()) { sum += myvector.back(); myvector.pop_back(); } std::cout << "total: " << sum << '\n'; return 0;}
output:
total: 55
7、vector::back()
:返回指向容器中的最后一个元素(不是指针)
8、vector::front()
:返回指向容器中的第一个元素(不是指针)
如果在空容器中调用此函数会产生未知的行为,另外注意的是,此函数返回的是元素的引用,意味着可以通过引用来更改此元素,除非这个容器是const型的,这样的话这两个函数就会返回const_reference
示例程序1
// vector::back#include <iostream>#include <vector>int main (){ std::vector<int> myvector; myvector.push_back(10); while (myvector.back() != 0) { myvector.push_back ( myvector.back() -1 ); } std::cout << "myvector contains:"; for (unsigned i=0; i<myvector.size() ; i++) std::cout << ' ' << myvector[i]; std::cout << '\n'; return 0;}
示例程序2
// vector::front#include <iostream>#include <vector>int main (){ std::vector<int> myvector; myvector.push_back(78); myvector.push_back(16); // now front equals 78, and back 16 myvector.front() -= myvector.back(); std::cout << "myvector.front() is now " << myvector.front() << '\n'; return 0;}
进阶操作
1、vector::capacity
:返回当前开辟空间的容量数,大于等于size
2、vector::max_size
:返回当前vector容器能够容纳的所有容量数(包括未开辟的)
示例程序
// comparing size, capacity and max_size#include <iostream>#include <vector>int main (){ std::vector<int> myvector; // set some content in the vector: for (int i=0; i<100; i++) myvector.push_back(i); std::cout << "size: " << (int) myvector.size() << '\n'; std::cout << "capacity: " << (int) myvector.capacity() << '\n'; std::cout << "max_size: " << (int) myvector.max_size() << '\n'; return 0;}
output:(一种可能的输出)
size: 100capacity: 128max_size: 1073741823
3、vector::rbegin
:返回指向将容器内元素逆转后第一个元素的指针,注意这个指针是“逆指针”,与普通指针增加地址方向相反(也就是指向原容器最后一个)
4、vector::rend
:返回指向将容器内元素逆转后最后一个元素的指针,注意这个指针是“逆指针”,与普通指针增加地址方向相反(也就是指向原容器第一个)
示例程序
#include <iostream>#include <vector>int main (){ std::vector<int> myvector (5); // 定义拥有5个空元素的容器 int i=0; std::vector<int>::reverse_iterator rit = myvector.rbegin(); for (; rit!= myvector.rend(); ++rit) *rit = ++i; std::cout << "myvector contains:"; for (std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0;}
output:
myvector contains: 5 4 3 2 1
5、vector::resize(n,val)
:调整当前的vector容量为n,如果n小于当前size,则保留前n个元素,其他的销毁;如果n大于size,则扩充容量至n,根据val是否表明来初始化多出的元素,没有表明val则普通初始化,如果n同时大于capacity,则自动调整空间大小
示例程序
#include <iostream>#include <vector>int main (){ std::vector<int> myvector; // set some initial content: for (int i=1;i<10;i++) myvector.push_back(i); myvector.resize(5); myvector.resize(8,100); myvector.resize(12); std::cout << "myvector contains:"; for (int i=0;i<myvector.size();i++) std::cout << ' ' << myvector[i]; std::cout << '\n'; return 0;}
output:
myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0
6、vector::insert()
:在指定位置插入元素,有五种重载函数:
iterator insert (const_iterator position, const value_type& val); iterator insert (const_iterator position, size_type n, const value_type& val);template <class InputIterator>iterator insert (const_iterator position, InputIterator first, InputIterator last); iterator insert (const_iterator position, value_type&& val);iterator insert (const_iterator position, initializer_list<value_type> il);//position:插入位置//val:要插入的值 n:插入元素的数量 first,last:插入的范围 il:具有初始化功能的对象
示例程序
#include <iostream>#include <vector>int main (){ std::vector<int> myvector (3,100); std::vector<int>::iterator it; it = myvector.begin(); it = myvector.insert ( it , 200 ); myvector.insert (it,2,300); // "it" 不再有效, 设置一个新的: it = myvector.begin(); std::vector<int> anothervector (2,400); myvector.insert (it+2,anothervector.begin(),anothervector.end()); int myarray [] = { 501,502,503 }; myvector.insert (myvector.begin(), myarray, myarray+3); std::cout << "myvector contains:"; for (it=myvector.begin(); it<myvector.end(); it++) std::cout << ' ' << *it; std::cout << '\n'; return 0;}
output:
myvector contains: 501 502 503 300 300 400 400 200 100 100 100
7、vector::erase()
:移除一个位置或一段范围内的元素(两个重载):
iterator erase (const_iterator position); //特定位置的iterator erase (const_iterator first, const_iterator last); //一段范围内
示例程序
#include <iostream>#include <vector>int main (){ std::vector<int> myvector; // 设定一些值 (从 1 到 10) for (int i=1; i<=10; i++) myvector.push_back(i); // 去除第六个元素 myvector.erase (myvector.begin()+5); // 去除前三个元素: myvector.erase (myvector.begin(),myvector.begin()+3); std::cout << "myvector contains:"; for (unsigned i=0; i<myvector.size(); ++i) std::cout << ' ' << myvector[i]; std::cout << '\n'; return 0;}
output:
myvector contains: 4 5 7 8 9 10
8、vector::clear
:清除容器中所有的元素,容器容量归为0
示例程序
#include <iostream>#include <vector>int main (){ std::vector<int> myvector; myvector.push_back (100); myvector.push_back (200); myvector.push_back (300); std::cout << "myvector contains:"; for (unsigned i=0; i<myvector.size(); i++) std::cout << ' ' << myvector[i]; std::cout << '\n'; myvector.clear(); myvector.push_back (1101); myvector.push_back (2202); std::cout << "myvector contains:"; for (unsigned i=0; i<myvector.size(); i++) std::cout << ' ' << myvector[i]; std::cout << '\n'; return 0;}
阅读全文
0 0
- C++:STL常用函数模块总结(vector)
- C++:STL常用函数模块总结(set)
- C++:STL常用函数模块总结(算法algorithm)
- C++STL中Vector常用函数
- STL vector常用函数
- C++:STL常用模块总结(map)
- 【C++】STL常用容器总结之三:向量vector
- 【STL】vector函数用法总结
- STL常用函数总结
- 【STL】vector常用函数的例子
- vector -- STL中容器的常用函数
- STL之Vector(二):Vector常用函数
- STL之Vector(三):Vector常用函数
- STL vector用法介绍+ STL 常用函数用法
- C++STL 常用 函数 用法
- C++STL 常用 函数 用法
- C++STL 常用 函数 用法
- C++STL 常用 函数 用法
- 数据库经典面试问题-核心概念
- 【面向HTML--入门】
- C++开源项目
- 优雅降级和渐进增强
- java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig
- C++:STL常用函数模块总结(vector)
- leetcode 384. Shuffle an Array 数组洗牌
- arm-a8 点亮LED
- 「MICCAI 2017」Reading Notes
- 自定义View
- MySQL数据引擎
- vs2013(64bit)+opencv2.4.13
- leetcode 385. Mini Parser
- 链表中倒数第k个节点