Vector用法详解
2016-07-20 14:24
375 查看
vector
–一.
vector可以模拟动态数组
–二.
vector的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public
拷贝构造函数和重载的赋值操作符)
三.必须包含的头文件#include <vector>
– 四.
vector支持随机存取
– 五.
vector的大小(size)和容量(capacity)通常是不同的,size返回实际元素个数,
capacity返回vector能容纳的元素最大数量。如果插入元素时,元素个数超过capacity,
需要重新配置内部存储器。
->构造、拷贝和析构
->[b]非变动操作[/b]
eg.
->赋值操作
所有的赋值操作都有可能调用元素类型的默认构造函数,拷贝构造函数,赋值操作符和析构函数
如:
std::list<T> l;
std::vector<T> v;
…
v.assign(l.begin(),l.end());
eg.
OutPut :
42 42 42 42 42 42 42 42 42 42
output :
0 1 2 3 4 5 6 7 8 9
元素存取
下面的操作是错误的:
std::vector<T> v;//empty
v[5]= t; //runtime
error
std::cout << v.front(); //runtime
error
eg.
vector<string>
words;
迭代器相关函数
使用迭代器时应注意:
迭代器持续有效,除非发生以下两种情况:
1.) 或插入元素
2.) 容量变化而引起内存重新分配
eg.
假设输入是 : hey mickey you're so fine
output:
插入(insert)元素
eg.
output:
CCCCABCDEFGHIJ
output :
–删除(remove)元素
eg.
output:
output:
output :
ACEFGHIJ
–一.
vector可以模拟动态数组
–二.
vector的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public
拷贝构造函数和重载的赋值操作符)
三.必须包含的头文件#include <vector>
– 四.
vector支持随机存取
– 五.
vector的大小(size)和容量(capacity)通常是不同的,size返回实际元素个数,
capacity返回vector能容纳的元素最大数量。如果插入元素时,元素个数超过capacity,
需要重新配置内部存储器。
->构造、拷贝和析构
->[b]非变动操作[/b]
eg.
vector<int> v1(10); cout << "The capacity of v1 is " << v1.capacity() << endl; cout << "The size of v1 is " << v1.size() << endl; vector<int> v2; v2.reserve(20); cout << "The capacity of v2 is " << v2.capacity() << endl; cout << "The size of v2 is " << v2.size() << endl;
output :
The capacity of v1 is 10 The size of v1 is 10 The capacity of v2 is 20 The size of v2 is 0
->赋值操作
所有的赋值操作都有可能调用元素类型的默认构造函数,拷贝构造函数,赋值操作符和析构函数
如:
std::list<T> l;
std::vector<T> v;
…
v.assign(l.begin(),l.end());
eg.
vector<int> v; v.assign( 10, 42 ); for( vector<int>::size_type i = 0; i < v.size(); i++ ) { cout << v[i] << " "; } cout << endl;
OutPut :
42 42 42 42 42 42 42 42 42 42
vector<int> v1; for( int i = 0; i < 10; i++ ) { v1.push_back( i ); } vector<int> v2; v2.assign( v1.begin(), v1.end() ); for( vector<int>::size_type i = 0; i < v2.size(); i++ ) { cout << v2[i] << " "; }
cout << endl;
output :
0 1 2 3 4 5 6 7 8 9
元素存取
下面的操作是错误的:
std::vector<T> v;//empty
v[5]= t; //runtime
error
std::cout << v.front(); //runtime
error
eg.
vector<string>
words;
string str; while( cin >> str ) words.push_back(str); sort( words.begin(), words.end() ); cout << "In alphabetical order, the first word is '" << words.front() << "'." << endl;
假设输入是: now is the time for all good men to come to the aid of their country
output:
In alphabetical order, the first word is 'aid'.
vector<int> v; for( int i = 0; i < 5; i++ ) { v.push_back(i); } cout << "The first element is " << v.front() << " and the last element is " << v.back() << endl;
output:
The first element is 0 and the last element is 4
迭代器相关函数
使用迭代器时应注意:
迭代器持续有效,除非发生以下两种情况:
1.) 或插入元素
2.) 容量变化而引起内存重新分配
eg.
vector<string> words; string str; while( cin >> str ) words.push_back(str); for( vector<string>::const_iterator iter = words.begin(); iter != words.end(); ++iter ) { cout << *iter << endl; }
假设输入是 : hey mickey you're so fine
output:
hey
mickey you're so fine
插入(insert)元素
eg.
vector<char> alphaVector; for( int i=0; i < 10; i++ ) { alphaVector.push_back( i + 'A' ); } // Insert four C's into the vector vector<char>::iterator theIterator = alphaVector.begin(); alphaVector.insert( theIterator, 4, 'C' ); // Display the vector for( theIterator = alphaVector.begin(); theIterator != alphaVector.end(); ++theIterator ) { cout << *theIterator; }
output:
CCCCABCDEFGHIJ
vector<int> v1; v1.push_back( 0 ); v1.push_back( 1 ); v1.push_back( 2 ); v1.push_back( 3 ); vector<int> v2; v2.push_back( 5 ); v2.push_back( 6 ); v2.push_back( 7 ); v2.push_back( 8 ); cout << "Before, v2 is: "; for( vector<int>::size_type i = 0; i < v2.size(); i++ ) { cout << v2[i] << " "; } cout << endl; v2.insert( v2.end(), v1.begin(), v1.end() ); cout << "After, v2 is: "; for( vector<int>::size_type i = 0; i < v2.size(); i++ ) { cout << v2[i] << " "; }
cout << endl;
output :
Before, v2 is: 5 6 7 8
After, v2 is: 5 6 7 8 0 1 2 3
–删除(remove)元素
eg.
vector<char> alphas; for( int i=0; i < 10; i++ ) { static const char letters[] = "ABCDEFGHIJ"; alphas.push_back( letters[i] ); } vector<char>::size_type size = alphas.size(); vector<char>::iterator startIterator; vector<char>::iterator tempIterator; for( vector<char>::size_type i=0; i < size; i++ ) { startIterator = alphas.begin(); alphas.erase( startIterator ); // Display the vector for( tempIterator = alphas.begin(); tempIterator != alphas.end(); ++tempIterator ) { cout << *tempIterator; } cout << endl; }
output:
BCDEFGHIJ CDEFGHIJ DEFGHIJ EFGHIJ FGHIJ GHIJ HIJ IJ
J
vector<char> alphas; for( int i=0; i < 10; i++ ) { static const char letters[] = "ABCDEFGHIJ"; alphas.push_back( letters[i] ); } // display the complete vector for( vector<char>::size_type i = 0; i < alphas.size(); i++ ) { cout << alphas[i]; } cout << endl; // use erase to remove all but the first two and last three elements // of the vector alphas.erase( alphas.begin()+2, alphas.end()-3 ); // display the modified vector for( vector<char>::size_type i = 0; i < alphas.size(); i++ ) { cout << alphas[i]; }
cout << endl;
output:
ABCDEFGHIJ
ABHIJ
#include <iostream> #include <vector> #include <iterator> using namespace std; int main() { vector<char> alphas; for( int i=0; i < 10; i++ ) { static const char letters[] = "ABCDEFGHIJ"; alphas.push_back( letters[i] ); } vector<char>::iterator iter = alphas.begin(); while( iter != alphas.end() ) { if (*iter == 'B' || *iter == 'D') iter = alphas.erase( iter ); else ++iter; } copy(alphas.begin(), alphas.end(), ostream_iterator<char>(cout, "")); cout << endl; }
output :
ACEFGHIJ
相关文章推荐
- Mac终端常用命令
- Dll注入经典方法完整版
- 使用Android Studio开发调用.NET Webservice 之初体验
- 【NGUI】记录button的动态效果
- 如何看I2C的从机地址(MMA8451Q芯片为例)
- 用Xib自定义一个View
- 关于苹果推送和证书
- SVNException: svn: E175002: Connection reset
- ubuntu安装systemtap
- JQuery中html、append、appendTo、after、insertAfter、before、insertBefore、empty、remove系列方法的使用
- session验证并跳转至登录页面的总结
- [C#]获取IP地址以及获取地址
- C++经典题目上
- 各种排序算法的分析及java实现
- Linux vim 常用设置
- zk mysql 主从自动切换
- iOS开发UI篇-CALayer简介
- 找不到javax.servlet包
- zk mysql 主从自动切换
- zk mysql 主从自动切换