STL
stl分为
-
- 容器
-
- 算法
容器包括 vector,queue,priority_queue,set,map,
算法包括 sort,upper_bound,lower_bound,(含在< algorithm >中)
[ 注 ] 迭代器约等于指针
容器之间的对比
成员函数 | vector | queue | stack | priority_queue | set |
---|---|---|---|---|---|
empty() | \sqrt{} | \sqrt{} | \sqrt{} | \sqrt{} | \sqrt{} |
size() | \sqrt{} | \sqrt{} | \sqrt{} | \sqrt{} | \sqrt{} |
pop() | NA | \sqrt{} | \sqrt{} | \sqrt{} | NA |
push() | NA | \sqrt{} | \sqrt{} | \sqrt{} | NA |
push_back() | \sqrt{} | NA | NA | NA | NA |
pop_back() | \sqrt{} | NA | NA | NA | NA |
top() | NA | NA | \sqrt{} | \sqrt{} | NA |
begin() | \sqrt{} | NA | NA | NA | \sqrt{} |
end() | \sqrt{} | NA | NA | NA | \sqrt{} |
front() | \sqrt{} | \sqrt{} | NA | NA | NA |
back() | \sqrt{} | \sqrt{} | NA | NA | NA |
clear() | \sqrt{} | NA | NA | NA | \sqrt{} |
erase() | \sqrt{} | NA | NA | NA | \sqrt{} |
insert() | \sqrt{} | NA | NA | NA | \sqrt{} |
find() | NA | NA | NA | NA | \sqrt{} |
vector
-
构造
数量(num)和值(val) - 构造一个初始放入num个值为val的元素的Vectorvector<int> alphaVector(n,val);
- insert 函数(时间复杂度较高,特别是在front的insert,会将后面的所有元素向后移动)
语法:
insert() 函数有以下三种用法:
-
在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
iterator insert( iterator loc, const TYPE &val );
-
在指定位置loc前插入num个值为val的元素
void insert( iterator loc, size_type num, const TYPE &val );
-
在指定位置loc前插入区间[start, end)的所有元素 .
void insert( iterator loc, input_iterator start, input_iterator end );
举例:
//创建一个vector,置入字母表的前十个字符
vector<char> alphaVector;
for( int i=0; i < 10; i++ )
alphaVector.push_back( i + 65 );
vector<char>::iterator theIterator = alphaVector.begin();
for(theIterator ;theIterator !=alphaVector.end();theIterator++){
printf("%c",*theIterator);
}
cout<<endl;
//插入四个C到vector中
theIterator = alphaVector.begin();
alphaVector.insert( theIterator, 4, 'C' );
//显示vector的内容
for( theIterator ; theIterator != alphaVector.end(); theIterator++ )
cout << *theIterator;
显示:
ABCDEFGHIJ
CCCCABCDEFGHIJ
- erase 函数
语法:
erase函数删作指定位置loc的元素
iterator erase( iterator loc );
删除区间[start, end)的所有元素.返回值是指向删除的最后一个元素的下一位置的迭代器
iterator erase( iterator start, iterator end );
例如:
// 创建一个vector,置入字母表的前十个字符
vector<char> alphaVector;
for( int i=0; i < 10; i++ )
alphaVector.push_back( i + 65 );
int size = alphaVector.size();
vector<char>::iterator startIterator;
vector<char>::iterator tempIterator;
for( int i=0; i < size; i++ )
{
startIterator = alphaVector.begin();
alphaVector.erase( startIterator );
// Display the vector
for( tempIterator = alphaVector.begin();tempIterator != alphaVector.end(); tempIterator++ )
cout << *tempIterator;
cout << endl;
}
输出:
BCDEFGHIJ CDEFGHIJ DEFGHIJ EFGHIJ FGHIJ GHIJ HIJ IJ J