(二)C++篇-vector与迭代器的使用

2022-06-09  本文已影响0人  GoodTekken
(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;
}
上一篇 下一篇

猜你喜欢

热点阅读