C/C++

(1)字符串操作

1)stringstream

  类别:输入输出操作

用途:①二次输出(类似缓存) ②数据转换


#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(void){
string s, input;
while(getline(cin, s)){ //getline 将一行内容给s,s的长度自动适配
cout << "S : " << s << endl;
stringstream str(s);
while(str>>input)
cout << input << endl;
}

return 0;
}

#include <string>
#include <sstream>
#include <iostream>

int main()
{
std::stringstream stream;
std::string result;
int i = 1000;
stream << i; //将int输入流
stream >> result; //从stream中抽取前面插入的int值
std::cout << result << std::endl; // print the string "1000"

运行结果:

C/C++ 刷题小知识点_刷题


(2)sort函数

1)sort

  类别:排序

用途:①从小到大排序(默认) ②从大到小排序③less<数据类型>()//从小到大排序,greater<数据类型>()//从大到小排序

#include<cstdio>
#include<algorithm>
using namespace std;

int a[10]={9,6,3,8,5,2,7,4,1,0};
bool complare(int a,int b){
return a>b;
}
void Sort1(){
printf("从小到大 : ");
sort(a, a + 10);
for(int i = 0; i < 10; i++)
printf("%d ", a[i]);
}
void Sort2(){
printf("从大到小 : ");
sort(a, a + 10, complare);
for(int i = 0; i < 10; i++)
printf("%d ", a[i]);
}
int main(void){

printf("初始 : ");
for(int i = 0;i < 10; i++)
printf("%d ", a[i]);
printf("\n");
Sort1();
printf("\n");
Sort2();

return 0;
}
//数据类型是string,对string进行排序
#include<iostream>
#include<algorithm>
using namespace std;
int main(void){
string str[] = {
"adsfzcv", "a", "dsf", "werew"
};

for(int i = 0; i < 4; i++)
cout << str[i] << endl;
sort(str, str + 4, greater<string>());
for(int i = 0; i < 4; i++)
cout << str[i] << endl;
return 0;
}


(3)lower_bound()

1)lower_bound

用途:查找“大于或者等于x的第一个位置”,配合sort()

#include<cstdio>
#include<algorithm>
using namespace std;

int str[] = {12, 32, 43, 54, 3, 5, 2, 1};

int main(void) {

sort(str, str + 8);

int x = lower_bound(str, str + 8, 3) - str;

printf("%d %d", x, str[x]);

return 0;
}



(4)map集合

1)map

  类别:容器

用途:键值对(两属性相关)

下面提供2种简单常用的操作。

//若map<string, int> month_name来表示"月份名字到月份编号"的映射,然后用month_name["July"]=7这样的方式来赋值

#include<iostream>
#include<map>
using namespace std;

int main(void){
map<string, int> Map;
map<string,int>::iterator it; //迭代去
Map.insert(pair<string, int>("AA", 1)); //增加元素
Map.insert(pair<string, int>("BB", 1));
for (it = Map.begin(); it != Map.end(); it++){ //循环
cout << it -> first << " " << it -> second << endl;
}
}


#include<iostream>
#include<map>
using namespace std;
int main(void){

map<long long,int> Map;
for(int i = 0 ; i < 5; ++i)
Map[i] = 1; //添加5个元素
for(int i = 2; i < 10; ++i){
if(Map.count(i)){ //是否存在这个元素
Map[i]++; //第二个键++
cout << "存在 " << Map[i] <<endl;
}else {
cout << i << "不存在"<<endl;
}
}
return 0;
}

③键值对<string, int> 增加int值
#include<iostream>
#include<map>
using namespace std;

int main(void){
int N;
while(cin >> N && N != 0){
int cnt = 0;
map<string, int> Map;
map<string, int>::iterator it;
string str;
for(int i = 0 ; i < N; ++i){
cin >> str;
for(it = Map.begin(); it != Map.end(); ++it){
if(str == it -> first)
(it -> second)++;
}
if(it == Map.end())
Map.insert(pair<string, int>(str, 1));
}
for(it = Map.begin(); it != Map.end(); ++it){
if(it -> second > cnt){
cnt = it -> second;
str = it -> first;
}
}
cout << str << endl;
}


return 0;
}


(5)优先队列

1)priority_queue

  类别:容器

用途:优先队列(从小到大 或 从大到小)

  详细说明:STL里面默认用的是 vector. 比较方式默认用 operator< , 所以如果你把后面俩个参数缺省的话,即priority_queue pq;

  如果要用到小顶堆,则一般要把模板的三个参数都带进去。

  STL里面定义了一个仿函数 greater<>,对于基本类型可以用这个仿函数声明小顶堆

优先队列就是大顶堆,队头元素最大。

下面简单常用的操作。

//push() :入队
//pop() :出队
//top() : 取队首元素(但不删除)
#include<iostream>
#include<queue>
#include<vector>
using namespace std;

int main(void){
//greater 是从小到大,默认是从大到小
priority_queue<int , vector<int>, greater<int>> pq;
for(int i = 21; i < 31; ++i)
pq.push(i);
while(!pq.empty()){
printf("%d ", pq.top());
pq.pop();
}
return 0;
}


(6)vector集合

1)vector

  类别:容器

用途:字符串中插入删除某个字符等

下面简单常用的操作。

#include<cstdio>
#include<vector>
using namespace std;

vector<char> vec;

void print(){
vector<char>::iterator it;
for (it = vec.begin(); it != vec.end(); ++it)
printf("%c ", *it);
printf("\n");
}

int main(void){
vec.clear();
vec.push_back('a');
vec.push_back('b');
vec.push_back('c');
vec.push_back('d');
vec.push_back('e');
vec.insert(vec.begin() + 2, 'f');
vec.size();
print();
vec.erase(vec.begin() + 2);
vec.size();
print();
return 0;
}