c++ 错误点集锦

1、数组在作为函数参数传递的时候,就退化为指针了,这个时候无论是sizeof(array)还是sizeof(*array)得到的都只能是这个指针指的一个元素所占的字节数目(4),而不能得到数组的长度!!


2、vector类型作为函数参数传递的时候,是在进行复制,实际上的顺序并不会改变,而数组类型作为函数参数只能传递首指针,这个时候在函数中进行的操作实际会影响数组本身,这个时候,一般要先进行一次复制,再来进行操作。


3、注意模板类和模板函数都只能包含在h文件中,而不能在cpp文件中!


4、

#ifndef GUARD_median_h
#define GUARD_median_h

#include <iostream>
#include <algorithm>   
#include <stdexcept>  
#include <cstdlib>
	

using std::domain_error;

template <class DATA,class SIZE>
DATA median(<strong>DATA* ptr</strong>, SIZE size)//注意如何设参数的技巧
{
	if (size == 0)
		throw domain_error("Median of an empty vector");

	DATA *arr = <strong>new DATA[size]</strong>;/*以前在c中常常遇到希望可以动态调整数组元素个数,在c++中可以用new来实现!
注意,不能用如同arr[n]这种来定义,因为c与c++均要求数组元素个数是常量!所以要提高使用new(用来动态分配内存)的敏感性!*/
	memcpy(arr, ptr, <strong>size*sizeof(DATA)</strong>);/*注意memcpy函数是用来赋值整块内存里面的内容的,故第三个参数的大小一定是实际所占用的内存的大小(
要乘上每个元素的大小,而非仅仅只是元素的个数!!!(此时如果忘记乘上那个元素所占的内存,一般会出现很奇怪的数字。正如此,在出现很奇怪的数字的时候,
考虑是否忘记考虑元素所占的内存*/
	
	sort(arr, arr + size);

	SIZE mid = size / 2;
	
	DATA median = size % 2 == 0 ? (arr[mid] + arr[mid - 1]) / 2 : arr[mid];
	
	delete[] arr;//注意语法,有new就要有delete,养成好习惯!

	return median;
}

#endif
5、如果定义时候,进行了如int a(b);这种操作,实际上后续操作针对的其实是b。


6.error 4996的解决方法:#pragma warning(disable : 4996)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值