STL = Standard Template Library,标准模板库,已成为标准C++语言的一部分,有必要好好学习一下。
STL包括容器和算法两部分。先系统的学习一下容器,然后在学习算法!
容器是用来保存其它对象的对象。被保存的对象称为容器的元素。容器一般实现为模板类。
容器为元素分配存储空间,并提供元素访问方法。
stack,queue 和 priority_queue被实现为“容器适配器”。容器适配器并不是一个独立的容器,只是提供特定接口,而其内部使用其它容器来实现。
STL提供了以下容器模板类
前面总体介绍了一些关于STL容器的知识,下面将对bitset进行详细介绍。
#include <bitset> using std::bitset;bitset声明:
template < size_t N > class bitset;
bitset ( ); bitset ( unsigned long val ); template<class charT, class traits, class Allocator> explicit bitset ( const basic_string<charT,traits,Allocator>& str, typename basic_string<charT,traits,Allocator>::size_type pos = 0, typename basic_string<charT,traits,Allocator>::size_type n = basic_string<charT,traits,Allocator>::npos);
示例代码:
// 32位机上,sizeof (unsigned long) = 4,即32位 // 使用无符号整数初始化位集 unsigned long n = 0xf0f0ff00; bitset<32> bits1 (n); //位集从高到低:11110000111100001111111100000000 bitset<16> bits2 (n); //位集从高到低:1111111100000000 bitset<40> bits3 (n); //位集从高到低:0000000011110000111100001111111100000000 // 使用字符串初始化位集 string str = "1111111100000000"; bitset<16> strbits1 (str); //位集从高到低:1111111100000000 bitset<10> strbits2 (str); //位集从高到低:1111111100 bitset<20> strbits3 (str); //位集从高到低:00001111111100000000 // 如果使用非二进制串初始化会怎样? bitset<32> bits (-1); // 会把负数转换为相应的正数来初始化。此处相当于使用0xffffffff初始化。 // 如果使用负整数初始化会怎样? bitset<32> strbits (string("01abc10")); // 运行时报错
bitset<N>& operator&= (const bitset<N>& rhs); bitset<N>& operator|= (const bitset<N>& rhs); bitset<N>& operator^= (const bitset<N>& rhs); bitset<N>& operator<<= (size_t pos); bitset<N>& operator>>= (size_t pos); bitset<N> operator~() const; bitset<N> operator<<(size_t pos) const; bitset<N> operator>>(size_t pos) const; bool operator== (const bitset<N>& rhs) const; bool operator!= (const bitset<N>& rhs) const; // *** global functions: *** template<size_t N> bitset<N> operator& (const bitset<N>& lhs, const bitset<N>& rhs); template<size_t N> bitset<N> operator| (const bitset<N>& lhs, const bitset<N>& rhs); template<size_t N> bitset<N> operator^ (const bitset<N>& lhs, const bitset<N>& rhs); // *** iostream global functions (extraction/insertion): *** template<class charT, class traits, size_t N> basic_istream<charT, traits>& operator>> (basic_istream<charT,traits>& is, bitset<N>& rhs); template<class charT, class traits, size_t N> basic_ostream<charT, traits>& operator<< (basic_ostream<charT,traits>& os, bitset<N>& rhs); // *** bit access ***bool operator[] ( size_t pos ) const; reference operator[] ( size_t pos );
2.4、位操作函数
函数 | 说明 |
---|---|
set () | 位集置为全1 |
set (n) | 第n位置为1 |
reset () | 位集置为全0 |
reset (n) | 第n位置为0 |
flip () | 位集翻转 |
函数 | 说明 |
---|---|
to_string | 位集转换为字符串 |
to_ulong | 位集转换为无符号整数。如果位集size大于ulong的位数,则舍弃位集高位。 |
count | 返回位集中1的个数 |
size | 返回位集的容量 |
any | 如果位集中有1,则返回true |
none | 如果位集中没有1,则返回true |
test (n) | 如果第n位为1,则返回true |