C++一些函数 备用


输入输出 

重定向 

freopen("input.txt", "r", stdin);

整行输入
string a;
#include
  getline(cin, a);  

因为那个啥超时的原因,需要C语言 
char a[100];
#include 感觉2015就不支持这个了。
gets(a);
char a[1001];
scanf("%s",a);
读取一整行
#include
 string c;  
 getline(cin,c); 

cin输入字母和数字
    int a[3],b[3];  
    char c;  
    cin>>a[0]>>c>>a[1]>>c>>a[2];  
    cin>>b[0]>>c>>b[1]>>c>>b[2];  
//当时输入格式 3.2.1
cout的输出格式
#include
cout


cout保持小数点后几位

cout<

数组

动态分配

int *numList = (int *) malloc (n * sizeof(int)); 
scanf("%d", &numList[i]); 

int *nums = new int[n];


数组的初始值分配

int array [100]={0}


char 数组大小

#include
strlen(a);

字符串的大小  str.size();


如果是 new的话, 

string *strs = new string[n];
int *cc = new int[n];

字符串

find_first_not_of   http://baike.baidu.com/link?url=eikMzuoUH9_OOD_Z4ov-JdcAdv2bMse_eWBLjRuL5IH9ggR-AgMng2SI7GiLHQuzQWiRmetaKECksoq-TLoX8a

字符串一些函数 http://blog.sina.com.cn/s/blog_453a02280100r8tv.html  

string &append(int n,char c);        //在当前字符串结尾添加n个字符c

插入字符串

void insert(iterator it, int n, char c);//在it处插入n个字符c

C语言的字符串 需要限定大小,大小是比那个啥多一位,因为有终止符。

char 字符的一些函数,

#include  
char c='c'
if(islower(c)){
 c=toupper(c);
}


string 能够直接s.find(c) s是string格式,c是char格式

s.append(1,c);如果要加长string的话,要写明添加几个char 

动态生成数组

cin>>n;                   
	i=n-1;
	string *s=new string[n];

string 和char数组的转换

http://www.2cto.com/kf/201110/109447.html

环境:VS2010

代码:int len = strlen(str);//求字符串长度

解决:

std::string类有一个方法叫c_str()就是取出string对象的字符串,实现到char *的转换,调用方法:strlen(str.c_str());

总结:strlen只能用于c风格字符串,不能用于string,因为strlen是在遇到\0时结束判断的。用这个strlen(a.c_str())方法把string转换成c风格字符串即可解决

这个博客给出了字符串,字符数组的转换,

http://blog.csdn.net/xinwang24/article/details/6612686、

字符串数组转字符串

#include 
#include 
using namespace std;

int main(){
	char a[10]="aaaabbbba";
	string s(&a[0],&a[strlen(a)]);
	cout<
字符串转字符数组
#include 
#include 
using namespace std;

int main(){
	string s="aaaavvva";
	char a[10];
	strncpy(a,s.c_str(),s.length());
	
	for(int i=0;i<10;i++)
		cout<
字符串转数字

#include
using namespace std;

int main()
{
 char a='1';
 int x;
 x=atoi(a);  

 cout<



字符

#include
islower(ch);
isupper(ch);
isalpha(ch);


字符串和

vector的用法

vector 插入

vector 的定义

 vector existed(MAX, false);  


c.push_back(elem)   //在尾部加入一个数据。

http://blog.csdn.net/edify/article/details/4035243

vector的遍历

http://blog.csdn.net/liunian17/article/details/7435781

vector遍历输出

void print(int n){
	cout<<" "<

vector vec; 
for_each(vec.begin(),vec.end(),print);


错误原因

(1)error C2679: 二进制“>>”: 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换)   未定义string

#include "stdafx.h"
#include 
#include 
using namespace std;

int main(int argc, char* argv[])
{
	int a[7]={1,2,3,4,5,6,7};
	vector ivector(a,a+7);//vector的赋值并不可以像数组一样方便的用花括号方便的完成赋值,这里借用了数组来初始化这个vector,初始化方
	//式vector intvec(begin,end);这样可以用起来看上去还是比较习惯的。
	vector::iterator iter;
	for (iter=ivector.begin();iter!=ivector.end();iter++)
	{
		cout<<*iter<<'\0';
	}
	cout<

vector 逆序输出

c.insert(vector.begin(),elem)

还有一种 ,rbegin,rend

map的用法

map真的是好东西

http://blog.csdn.net/artemisrj/article/details/20373281

map好像插入的时候会自动排序。。。 

map查找

if(map.find(a)!=map.end()){
;
}


C++ 数据取值范围

char             -128 ~ +127        (1 Byte)
short             -32767 ~ + 32768    (2 Bytes)
unsigned short     0 ~ 65536        (2 Bytes)
int             -2147483648 ~ +2147483647   (4 Bytes)
unsigned int         0 ~ 4294967295    (4 Bytes)
long == int
long long         -9223372036854775808 ~ +9223372036854775807    (8 Bytes)

double         1.7 * 10^308        (8 Bytes)

climits头文件的用法

CHAR_MIN       char的最小值
SCHAR_MAX      signed char 最大值
SCHAR_MIN       signed char 最小值
UCHAR_MAX      unsigned char 最大值
SHRT_MAX       short 最大值
SHRT_MIN       short 最小值
USHRT_MAX      unsigned short 最大值
INT_MAX       int 最大值
INT_MIN        int 最小值
UINT_MAX       unsigned int 最大值
UINT_MIN        unsigned int 最小值
LONG_MAX      long最大值
LONG_MIN       long最小值
ULONG_MAX      unsigned long 最大值
FLT_MANT_DIG    float 类型的尾数
FLT_DIG         float 类型的最少有效数字位数
FLT_MIN_10_EXP   带有全部有效数的float类型的负指数的最小值(以10为底)
FLT_MAX_10_EXP    float类型的正指数的最大值(以10为底)
FLT_MIN        保留全部精度的float类型正数最小值
FLT_MAX        float类型正数最大值

LLONG_MAX   指的是long long 的最大值

溢出的判断条件

1065. A+B and C (64bit) (20)

素数(prime)的求法

bool issushu(int m){ //判断是否是素数  
    int j;  
    bool flag=true;  
    for(j=2;j*j<=m;j++){  
        if(j==2)  
            ;  
        else if(m%j==0){  
            flag=false;  
        }  
  
    }  
    return flag;  
}  

文件输入输出

    freopen("in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取
   // freopen("out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中
    fclose(stdin);//关闭文件
   fclose(stdout);//关闭文件
  


有时候分明包含头文件了却说不存在,那么原因就是没有用空间的关系,加上  std::

为了方便用fstream 写的函数

string  read(ifstream &T) //pass the file stream to the function
{  
	//the method to read a file, that I showed you before
	string a;
	char ch;
	//	a.append(" ");
	while(!T.eof())
	{
		T.get(ch);
		//cout<

C++文件的输入输出

http://blog.csdn.net/btooth/article/details/995097
#include 
using namespace std;

void main() //程序从这里开始运行
{
	ofstream SaveFile("cpp-home.txt");
	SaveFile << "Hello World, from www.cpp-home.com and Loobian!";
	SaveFile.close();
}
//#include
string fname="location.txt";
	
	ifstream f(fname.c_str());
	if(!f){
		cout<<"can't open the file "<>d;
		cout<


如果输入的数字以逗号隔开,那么可以用一个字符代替输入

	ifstream f(fname.c_str());
	while(!f.eof()){
		char aa;
		f>>xValues[i];
		f>>aa;
		f>>yValues[i];
		i++;
	}
	f.close();
也就是说fstream的输入输出都是可以按照普通的输入输出的规则进行的。 

要想换一个文件输入输出,那么就先关闭文件,再打开文件。

p1.close();
p1.open("C:\\outPoints.csv");

排序 sort

经典例子,用vector
http://blog.csdn.net/artemisrj/article/details/18195499


http://hi.baidu.com/posinfo/item/dc3e73584c535cc9d2e10c27

《Effective STL》里这些话可能对你也有用处:item 31      “我们总结一下你的排序选择:    ● 如果你需要在vector、string、deque或数组上进行完全排序,你可以使用sort或stable_sort。    ● 如果你有一个vector、string、deque或数组,你只需要排序前n个元素,应该用partial_sort。    ● 如果你有一个vector、string、deque或数组,你需要鉴别出第n个元素或你需要鉴别出最前的n个元素,而不用知道它们的顺序,nth_element是你应该注意和调用的。    ● 如果你需要把标准序列容器的元素或数组分隔为满足和不满足某个标准,你大概就要找partition或stable_partition。    ● 如果你的数据是在list中,你可以直接使用partition和stable_partition,你可以使用list的sort来代替sort和stable_sort。如果你需要partial_sort或nth_element提供的效果,你就必须间接完成这个任务,但正如我在上面勾画的,会有很多选择。      另外,你可以通过把数据放在标准关联容器中的方法以保持在任何时候东西都有序。你也可能会考虑标准非STL容器priority_queue,它也可以总是保持它的元素有序。”

要使用此函数只需用#include  sort即可使用,语法描述为:
sort(begin,end),表示一个范围,例如:
int _tmain(int argc, _TCHAR* argv[])
{
 int a[20]={2,4,1,23,5,76,0,43,24,65},i;
 for(i=0;i<20;i++)
  cout<
要注意,如果是20个元素的话,是从开头到+20,
sort针对字符串 ,和vector一样的用法

string ss;
sort(ss.begin(),ss.end());

c语言里面的  qsort 
int num[100];

Sample: int cmp ( const void *a , const void *b )

{ return *(int *)a - *(int *)b; }

qsort(num,100,sizeof(num[0]),cmp);


http://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.html

面向对象

其实没有好好学过C++,怎么说呢,语法什么的忘记特别快,还是给自己留一块地,放自己的想法吧。实验室没有面向对象的书看,这次趁着要改写voronoi类的机会温习一下C++面向对象、

一般C++面向对象的类有两个文件,一个文件主声明,一个文件主实现。有时候函数特别短的也可以放进头文件直接实现。


函数的形参,形参是函数声明的那个参数,实参是实际上的那个参数,也就是函数实际调用放进去的参数,数组的形参实参什么的调用有点凌乱,记一种就好了。

在头文件 ,h的类之中,公共类的声明如下。

bool generateVoronoi(float *xValues, float *yValues, int numPoints, float minX, float maxX, float minY, float maxY, float minDist=0,int centerPoints=-1);


VoronoiDiagramGenerator();//类的初始化
	~VoronoiDiagramGenerator();//类的析构


在.cpp 文件中,函数的实现是要加上类的名字,比如这个类的名字为VoronoiDiagramGenerator

bool VoronoiDiagramGenerator::generateVoronoi(float *xValues, float *yValues, int numPoints, float minX, float maxX, float minY, float maxY, float minDist,int centerPoints)
{




你可能感兴趣的:(C++/C)