ディレクトリ
C / C ++ライブラリ関数(TOLOWER / TOUPPER)変換は、文字の場合を達成しました
で使用されているctype.h
(C ++れるcctype
次関数法ライブラリで定義されました)
C:
函数实现原型:
int tolower(int c)//小写
{
if ((c >= 'A') && (c <= 'Z'))
return c + ('a' - 'A');
return c;
}
int toupper(int c)//大写
{
if ((c >= 'a') && (c <= 'z'))
return c + ('A' - 'a');
return c;
}
デモ-C言語
#include<string.h> //strlen
#include<stdio.h> //printf
#include<ctype.h> //tolower
int main()
{
int i;
char string[] = "THIS IS A STRING";
printf("%s\n", string);
for (i = 0; i < strlen(string); i++)
{
string[i] = tolower(string[i]);
}
printf("%s\n", string);
printf("\n");
}
デモ-C ++の実装
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
string str= "THIS IS A STRING";
for (int i=0; i <str.size(); i++)
str[i] = tolower(str[i]);
cout<<str<<endl;
return 0;
}
next_permutation()
関数のプロトタイプであるnext_permutation関数の場合:
#include
ブールnext_permutation(イテレータは、イテレータの端を開始)
配列が現在の構成に存在しない場合、関数は、そうでない場合は真偽を返します
prev_permutation機能はtrue、そうでない場合、電源を入れ、およびソートが存在しない場合はfalseを返します
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int num[5]={1,2,3}; //此时应该是升序,中间出现逆序的会无法出现全部排序
do
{
cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
}while(next_permutation(num,num+3));
return 0;
}
ランを見つけることができる後、next_permutationは(NUM、NUM + N ) アレイNUMの関数である最初のn個の要素の完全な配列、及び同時にNUM配列の値を変更します。
また、next_permutation()を使用する前に、アレイの昇順に配置される必要がある、または配列のみのいくつかの完全な配列の後に見つけることができる、ということを強調しておきます。
prev_premutation()、次の...反対
qsort()
関数の宣言
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
パラメータ
- ベース -ソートする配列の最初の要素へのポインタ。
- nitems数は、アレイの基本要素によって指さ- 。
- サイズ -バイトの配列の各要素の大きさ、。
- 比較例 - 2つの要素を比較するための機能。
返却値
この関数は値を返しません。
#include <stdio.h>
#include <stdlib.h>
int values[] = { 88, 56, 100, 2, 25 };
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main()
{
int n;
printf("排序之前的列表:\n");
for( n = 0 ; n < 5; n++ ) {
printf("%d ", values[n]);
}
qsort(values, 5, sizeof(int), cmpfunc);
printf("\n排序之后的列表:\n");
for( n = 0 ; n < 5; n++ ) {
printf("%d ", values[n]);
}
return(0);
}
srand関数の使用とC ++ランド
コンピュータは、各生成されたシーケンスは、小さな初期値、すなわちランダムシードを有する多項式Mの小さな配列によって生成された擬似乱数によりランダム数です。(注:小M周期系列多項式であること、65535で、それぞれランダムシード生成された乱数を使用すると、あなたは65,535乱数を取得するときが繰り返され、65535サイクルです。)
再帰式を計算するためのベンチマークとして、(私たちは、種子それを呼び出すことができます)、それは疑似乱数を数に基づいている、私たちは、ランド()関数は乱数を生成するために使用することができることを知っているが、これは、ランダムな数字の意味では真実ではありません一連の数字うち、シリーズこの時間の多くは、それが乱数を生成するために相当し、通常の発表、に沿ったものであるが、これはコンピュータが起動するが、この種の値が設定されていない真の乱数である場合、あなたがない限り、システムを破壊します。
ランド()
機能:ランダムな番号ジェネレータ
使用法:
int rand(void)
所在头文件: stdlib.h
内部のrand()の実装は、それが特定の範囲にランダムとみなすことができるように、それらの特に長い期間、本当にランダムではなく、線形合同法を用いて行われます。
ランドは、()RAND_MAX 0の範囲の乱数値を返します。RAND_MAXの範囲は、32767(INT)の最小値との間です。65535は、2バイトの符号なし整数、4バイト4294967295の範囲の整数です。選択した各番号の0〜RAND_MAX確率は同じです。
ユーザは、乱数シードを設定しない場合は、デフォルトでは、乱数シードです。
ランド()が生成された擬似乱数であり、各実行は同じであり、異なる()関数にsrand関数で初期化します。
srandを()
機能:乱数ジェネレータを初期化します
使用法:
void srand(unsigned int seed)
所在头文件: stdlib.h
srand関数は、()(RANDを設定する)乱数シードで乱数を発生させます。各セットは、同一のたびに生成される)同じシード値、ランダム値ランド(ある場合、シードパラメータは、整数でなければなりません。
現在の乱数シードを使用してクロックとして、
各実行で生成されたランド()乱数が最後と同一です。さまざまに、()関数srand関数で初期化します。すべてのプログラムの実行時間が異なるためにsrand((unsigned int型)(時間(NULL))メソッドを利用することができる、異なる乱数シードを生成します。
乱数を発生させる使い方
- 1)にsrand()unsigned int型である種子を提供します。
- 2)コールランド()は、それが0とRAND_MAX)srand関数としてシード()の間の乱数の値を(返します。
- 3)いくつかのコールのランド()によれば、これを連続的に新しい乱数を得るために、
- 4)いずれかの時点で、あなたは()、さらに新しい種子を提供し、「ランダム化された」のrand()の出力をsrand関数を与えることができます。
0〜RAND_MAX手順の間の乱数
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
srand((unsigned)time(NULL));
for(int i = 0; i < 10;i++ )
cout << rand() << '/t';
cout << endl;
return 0;
}
一般式で表される乱数の一定範囲
要取得 [a,b) 的随机整数,使用 (rand() % (b-a))+ a;
要取得 [a,b] 的随机整数,使用 (rand() % (b-a+1))+ a;
要取得 (a,b] 的随机整数,使用 (rand() % (b-a))+ a + 1;
通用公式: a + rand() % n;其中的 a 是起始值,n 是整数的范围。
要取得 a 到 b 之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得 0~1 之间的浮点数,可以使用 rand() / double(RAND_MAX)。
stringstream
stringstream
列C ++の別のタイプは、ストリーム(ストリーム)オブジェクト、および前学んだ提供iostream、fstream
同様の動作を制御します。使用するにstringstream
は、まず、この行を追加する必要があります。#含める
stringstream
主に文字列の分割に使用される、あなたはたとえば、>>それから、)文字列の内容は、((クリア)とstrで開始するように設定されている個々のデータ出力を指定することができます。string s; stringstream ss; int a, b, c; getline(cin, s); ss.clear(); ss.str(s); ss >> a >> b >> c;
ここでは、使用の参照
stringstream
例を:タイトル:N次のN行を表す数である入力の最初の行のデータがあり、データの各行は、番号整数固定(ライン最大当たり20までの200文字)が存在しない、プログラムを記述します各行の合計がプリントアウト。
入力:
3
1 2 3
20 17 23 54 77 60
111 222 333 444 555 666 777 888 999出力:
6
251
4995次のようにプログラムは以下のとおりです。
string s; stringstream ss; int n, i, sum, a; cin >> n; getline(cin, s); // 讀取換行 for (i=0; i<n; i++) { getline(cin, s); ss.clear(); ss.str(s); sum=0; while (1) { ss >> a; if ( ss.fail() ) break; sum+=a; } cout << sum << endl; }
[stringstream使用详解](https://blog.csdn.net/xw20084898/article/details/21939811)
ファンクション文字列クラスを見つけます
カウント機能
头文件 algorithm
機能は見つけることが似ています。この関数は、引数としてイテレータ一対の値を使用して表示される統計結果の数の値を返します。
ベクトルオブジェクトにそれらをシリーズintデータ型を読み込み、保存するプログラムを記述し、統計登場し、多くの倍の値を指定します。
cout<<count(ivec.begin() , ivec.end() , searchValue)
特定の実装:
//读取一系列int数据,并将它们存储到vector对象中,
//然后使用algorithm头文件中定义的名为count的函数,
//统计某个指定的值出现了多少次
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int ival , searchValue;
vector<int> ivec;
//读入int型数据并存储到vector对象中,直至遇到文件结束符
cout<<"Enter some integers(Ctrl+Z to end): "<<endl;
while(cin >> ival)
ivec.push_back(ival);
cin.clear(); // 使输入流重新有效
//读入欲统计其出现次数的int值
cout<<"Enter an integer you want to search: "<<endl;
cin>>searchValue;
//使用count函数统计该值出现的次数并输出结果
cout<<count(ivec.begin() , ivec.end() , searchValue)
<<" elements in the vector have value "
<<searchValue<<endl;
return 0;
}
count_if機能
count_if:戻り値は、要素の数は間隔条件を満たす指定されました。
テンプレート
#include <vector>
#include <algorithm>
#include <iostream>
bool greater10(int value)
{
return value >10;
}
int main()
{
using namespace std;
vector<int> v1;
vector<int>::iterator Iter;
v1.push_back(10);
v1.push_back(20);
v1.push_back(10);
v1.push_back(40);
v1.push_back(10);
cout << "v1 : ";
for (Iter = v1.begin(); Iter != v1.end(); Iter++)
cout << *Iter << " ";
cout << endl;
vector<int>::size_type result1 = count_if(v1.begin(), v1.end(), greater10); //count_if算法返回使谓词函数返回条件成立的元素个数
cout << "The number of elements in v1 greater than 10 is: "
<< result1 << "." << endl;
return 0;
}
述語(述語):戻り型の条件を決定するために、検出の特定の機能を実行し、条件が満たされていると指摘しました。
概要:
COUNT:値が連続して発生した回数をカウントcount_if:シーケンスの述語が一致した回数をカウント
グレーター()および以下()関数
大きく、少ないヘッダファイル
定義された2つの構造は、コンパレータ機能()演算子をオーバーライドすることによって達成されます。
次のように大きいが定義されています。
template <class T> struct greater {
bool operator() (const T& x, const T& y) const {return x>y;}
typedef T first_argument_type;
typedef T second_argument_type;
typedef bool result_type;
};
次のようにあまり定義されています。
template <class T> struct less {
bool operator() (const T& x, const T& y) const {return x<y;}
typedef T first_argument_type;
typedef T second_argument_type;
typedef bool result_type;
};
具体的な使用
#include<iostream>
#include<algorithm>//因为用了sort()函数
#include<functional>//因为用了greater<int>()
using namespace std;
void main()
{
int a[]={3,1,4,2,5};
int i;
int len=sizeof(a)/sizeof(int);//这里切记要除以sizeof(int)!
sort(a ,a + len, greater<int>());//内置类型的由大到小排序
for(i=0;i<len;i++)
cout<<a[i]<<" ";
cout<<"\n";
sort(a, a + len, less<int>());//内置类型的由小到大排序
for(i=0;i<len;i++)
cout<<a[i]<<" ";
}
PRIORITY_QUEUE使い方
头文件 : #include<queue>
定义: priority_queue<int> p;
ビッグ優先出力データ
priority_queue<Type, Container, Functional>
Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。
如果不写后两个参数,那么容器默认用的是vector,比较方式默认用operator<,也就是优先队列是大顶堆,队头元素最大。
举例:
#include<iostream>
#include<queue>
using namespace std;
int main(){
priority_queue<int> p;
p.push(1);
p.push(2);
p.push(8);
p.push(5);
p.push(43);
for(int i=0;i<5;i++){
cout<<p.top()<<endl;
p.pop();
}
return 0;
}
小さな優先出力データ
この方法の一つ
priority_queue<int, vector<int>, greater<int> > p;
例えば
#include<iostream>
#include<queue>
using namespace std;
int main(){
priority_queue<int, vector<int>, greater<int> >p;
p.push(1);
p.push(2);
p.push(8);
p.push(5);
p.push(43);
for(int i=0;i<5;i++){
cout<<p.top()<<endl;
p.pop();
}
return 0;
}
方法2:カスタムの優先順位は<シンボルのデフォルトを上書き
例えば:
#include<iostream>
#include<queue>
#include<cstdlib>
using namespace std;
struct Node{
int x,y;
Node(int a=0, int b=0):
x(a), y(b) {}
};
struct cmp{
bool operator()(Node a, Node b){
if(a.x == b.x) return a.y>b.y;
return a.x>b.x;
}
};
int main(){
priority_queue<Node, vector<Node>, cmp>p;
for(int i=0; i<10; ++i)
p.push(Node(rand(), rand()));
while(!p.empty()){
cout<<p.top().x<<' '<<p.top().y<<endl;
p.pop();
}//while
//getchar();
return 0;
}
シーンに適したSTL
ベクター | と | リスト | セットする | mulitset | 地図 | mulitmap | |
---|---|---|---|---|---|---|---|
メモリアーキテクチャ | シングルエンドの配列 | ダブルエンドの配列 | 二重リンクリスト | 二進木 | 二進木 | 二進木 | 二進木 |
ランダムストレージ | それはあります | それはあります | ノー | ノー | ノー | キーのために、ではありません | ノー |
検索速度の要素 | 遅いです | 遅いです | 非常に遅いです | 速いです | 速いです | キーの場合、速いです | キーの場合、速いです |
削除位置のインサート要素 | の終わり | 頭と尾の先端 | 任意の場所 | --- | --- | --- | --- |
リスト形式の
元素でベクター配列
両端キューキュー
マップキー-値、辞書の
テキスト処理でのセットは、あなたが無視したい単語を保存するために使用することができます。
isdigit()チェックが文字を説教するかどうか、小数点の桁の文字があります
説明
Cライブラリ関数のボイドisdigit(int型c)の説教の文字は、小数点の桁の文字で確認してください。
10進数は、次のとおりです。0123456789
関数の宣言
int isdigit(int c);
返回值: 如果 c 是一个数字,则该函数返回非零值,否则返回 0。
实例
#include <stdio.h>
#include <ctype.h>
int main()
{
int var1 = 'h';
int var2 = '2';
if( isdigit(var1) )
{
printf("var1 = |%c| 是一个数字\n", var1 );
}
else
{
printf("var1 = |%c| 不是一个数字\n", var1 );
}
if( isdigit(var2) )
{
printf("var2 = |%c| 是一个数字\n", var2 );
}
else
{
printf("var2 = |%c| 不是一个数字\n", var2 );
}
return(0);
}
結果
var1 = |h| 不是一个数字
var2 = |2| 是一个数字
STOI分析関数
機能
進文字列にn進変換
使い方
stoi(字符串,起始位置,n进制),将 n 进制的字符串转化为十进制
示例:
stoi(str, 0, 2); //将字符串 str 从 0 位置开始到末尾的 2 进制转换为十进制
ヘッダ
#include <string>
例
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "1010";
int a = stoi(str, 0, 2);
cout << a << endl;
}
//输出10
イオタ機能
関数原型
template <class ForwardIterator, class T>
void iota (ForwardIterator first, ForwardIterator last, T val);
等价于
template<class _FwdIt,class _Ty> inline
void _Iota(_FwdIt _First, _FwdIt _Last, _Ty _Val)
{ // compute increasing sequence into [_First, _Last)
for (; _First != _Last; ++_First, ++_Val)
*_First = _Val;
}
パラメータ:
最初の最後:
前方反復子(フォワードイテレータ)の終了時に初期位置に配列およびポインティング。この範囲、すなわち、[最初、最後)、最初の要素を含むすべての要素のうち、最後に第含むことを指摘したが、指向最後の要素を含みません。
ヴァル:蓄積の初期値。
機能
値の昇順で指定範囲内の割当要素。
例
// iota example
#include <iostream> // std::cout
#include <numeric> // std::iota
int main () {
int numbers[10];
std::iota (numbers,numbers+10,100);
std::cout << "numbers:";
for (int& i:numbers) std::cout << ' ' << i;
std::cout << '\n';
return 0;
}
numbers: 100 101 102 103 104 105 106 107 108 109