c++补充知识(个人向)

一些简单的c++知识点补充

(C++11特性)auto类型说明符

1
2
3
4
5
6
7
8
9
10
11
//auto类型说明符
auto i = 0, *p = &i; //i是整数、p是整型指针
auto sz = 0, pi = 3.14; // 错误:sz和pi的类型不一致

//auto会忽略顶层const,保留底层const
const int ci = i, &cr = ci;
auto b = ci; //b是整型(const被忽略)
auto c = cr; //c是整型(cr为ci的引用,ci是const int,但const被忽略)
auto d = &i; //d是指向i的整型指针
//e是指向ci这个对象的整型常量的指针(对常量对象取地址是一种底层const)
auto e = &cr;

Vector容器

简单使用方法:自己体会下面的代码吧

1
2
3
4
5
6
7
8
9
vector<string> v1; //定义vector
v1.push_back("abc");
v1.push_back("qwed");
v1.push_back("asdwrabc");
v1.push_back("awefx");
vector<string>::iterator it; ///构造迭代器
for(it=v1.begin();it!=v1.end();it++){
transform((*it).begin(),(*it).end(),(*it).begin(),::toupper); //把字符串全变为大写字母的方法
cout<<*it<<" "; //输出此时迭代器指向的元素

String流操作

1
2
3
4
5
6
7
8
9
10
11
vector<string> a;
string x;
getline(cin,x);
istringstream t(x); //把输入的字符串构造成stream
string temp;
while(t>>temp){ //从字符串流中读取一个个字符串,并push进vector中
a.push_back(temp);
}
sort(a.begin(),a.end()); //对vector进行排序
for(vector<string>::iterator it=a.begin();it!=a.end();it++)
cout<<*it<<" ";

bitset类型

1
2
3
4
bitset<32> a(n); //把n转化成32位二进制数类型
cout<<a; //按二进制输出该数
cout<<a.count(); //输出其中1的个数(等价于__builtin_popcount(n))
cout<<a.size(); //输出32

一些数值算法

1
2
3
4
5
6
7
8
//accumulate
for(int i=1;i<=10;i++) a.push_back(1);
int sum = accumulate(a.begin(),a.end(),0);//初值为0,返回容器所有元素之和
cout<<sum<<endl;
//partial_sum
partial_sum(a.begin(),a.end(),a.begin());//当前位置和前一位置元素之和赋值给当前位置
for(vector<int>::iterator it=a.begin();it!=a.end();it++)
cout<<*it<<" ";

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!