(二)C++篇-vector与迭代器的使用
(1)数据接收
输入:while(cin>>word)
保存:text.push_back(word);
通过控制台不断的输入字符串,使用push_back将其保存在vecotr类型的word中,直到输入的字符串是123,退出当前while循环。
(2)数据处理
for (vector<string>::iterator iter = text.begin();iter != text.end(); ++iter)
相较于传统的for循环,使用text.begin()和text.end()可以容易地在vector实时增加新元素而不容易报错。
例如增加了新元素的话,使用传统方式的for测试,用保存的 size 值作为循环的结束条件就会有问题,因为没有将新加入的元素计算在内。
(3)字节长度
cout<<sizeof(vector<int>::size_type)<<endl;
(4)迭代器的使用
for (vector<string>::iterator iter = text.begin();iter != text.end(); ++iter)
可以使用迭代器 *iter获取和设置vector数据,也可以使用下标text[i]来获取和设置vector数据。
(5)bitset的使用
bitset<32> bitvec2(0xffff); // bits 0 ... 15 are set to 1; 16 ...31 are 0
bitset一般使用在位运算的逻辑运算中,可作简单了解。
b.any(): b中是否存在置为 1 的二进制位?
b.none(): b 中不存在置为 1 的二进制位?
b.count() : b 中置为 1 的二进制位的个数
b.size(): b 中二进制位的个数
b[pos]: 访问 b 中在 pos 处二进制位
b.test(pos): b 中在 pos 处的二进制位置为 1 ?
b.set(): 把 b 中所有二进制位都置为 1
b.set(pos): 把 b 中在 pos 处的二进制位置为 1147
b.any(): b 中是否存在置为 1 的二进制位?
b.reset(): 把 b 中所有二进制位都置为 0
b.reset(pos): 把 b 中在 pos 处的二进制位置为 0
b.flip(): 把 b 中所有二进制位逐位取反
b.flip(pos): 把 b 中在 pos 处的二进制位取反
b.to_ulong(): 用 b 中同样的二进制位返回一个 unsigned long 值
os << b: 把 b 中的位集输出到 os 流
测试代码如下:
#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
int main()
{
string word;
vector<string> text;
//(1)数据接收
while(cin>>word)
{
text.push_back(word);
if(word=="123")
{
break;
}
}
//(2)数据处理
// 传统方式:先获取数据长度,然后使用for循环
// vector<int>::size_type length = text.size();
// for(vector<int>::size_type i =0;i<length;i++)
for(vector<int>::size_type i =0;i != text.size();i++)
{
cout<<text[i]<<endl;
}
//(3)字节长度
cout<<sizeof(vector<int>::size_type)<<endl;
//(4)迭代器的使用
//更典型的做法是用迭代器来编写循环:
// equivalent loop using iterators to reset all the elements in ivec to 0
cout<<"Clean the vecore use iterator"<<endl;
for (vector<string>::iterator iter = text.begin();iter != text.end(); ++iter)
{
*iter = ""; // set element to which iter refers to 0
}
for(vector<int>::size_type i =0;i != text.size();i++)
{
cout<<text[i]<<endl;
}
cout<<sizeof(vector<int>::size_type)<<endl;
bitset<32> bitvec2(0xffff); // bits 0 ... 15 are set to 1; 16 ...31 are 0
cout << "bitvec2: " << bitvec2 << endl;
return 0;
}