社区
C++ 语言
帖子详情
vector 下标操作是左值
zyc_0204
2014-08-21 10:53:36
为什么STL标准不重载一个下标操作为右值的版本。 这有什么考虑吗?
这在使用vector常引用时,不能使用下标操作很恼火。
...全文
168
1
打赏
收藏
vector 下标操作是左值
为什么STL标准不重载一个下标操作为右值的版本。 这有什么考虑吗? 这在使用vector常引用时,不能使用下标操作很恼火。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
阿呆_
2014-08-21
打赏
举报
回复
不明白什么意思。 vector的operator []本来就有两个,一个普通reference,一个const reference。普通reference就可以做左值。 const reference可以做右值呀。
八股.docx
八股.docx
c++基础语法,打好基础
c++基础语法,包含14页内容,15339个字。对于初学者非常有帮助。
CPrimer中文版(第四版)学习笔记.pdf
CPrimer中文版(第四版)学习笔记.pdf
一维动态数组实现的矩阵类
实现有两个类 C
Vector
存放数据的自定义动态数组,采用一维动态数组存储矩阵数据 CMatrix 实现的矩阵类 使用的时候包含#include "Matrix.h"就行 CMatrix的接口函数都在"Matrix.h"里面 C
Vector
的接口函数在"
Vector
.h"里,"Matrix.h"里包含了"
Vector
.h" 具体用法与测试用例Main.cpp里有3个测试用例,分别是针对构造函数属性计算与运算符重载的 内已包含测试工程xp\vc6.0\上亲测通过,并经过BoundsChecker测试没有内存泄漏。有兴趣的童鞋可以下作参考。 注意: 1、
下标
都是从0开始,数学课上矩阵
下标
都是从1开始,但是工作后习惯0开始,矩阵M的第一个元素是M(0,0) 2、类型定死为double,原来作业是模板类,由于vc6对模版支持不好,另矩阵计算double类比较理想、整型几乎只能作加减 提供了多种初始化方式,int[]、float[]、double[]均可构造初始化,或则先构造出C
Vector
再由C
Vector
初始化。 3、定义了一个最大允许误差#define permit_eof (1.0e-13),判断相等使用宏 #define EQUAL(a,b) ( ((b) - (a) < permit_eof)&&((a) - (b) < permit_eof) ? (TRUE) : (FALSE) ) 正常输出的时候绝对值小于permit_eof 的时候清零处理,想要指定精度输出请用PrintOut 鸣谢:CSDN上supermegaboy君的C/C++
左值
性精髓,读后略有所感,空闲时重构了下大学时的作业,着重区分了函数返回值的左右值 =================================================附录:接口函数========================================================================== 开放的接口: C
Vector
//构造函数 C
Vector
(); virtual ~C
Vector
(); C
Vector
(const size_t &nSize;); C
Vector
(const C
Vector
& vIn);//拷贝构造函数 C
Vector
(const double* const pData,const size_t &nSize;); C
Vector
(const float* const pData,const size_t &nSize;); C
Vector
(const int* const pData,const size_t &nSize;); //公开的成员函数 double at(const size_t& uIndex)const;//作右值 BOOL push_back(const double& dbIn ); BOOL resize(const size_t& nSize); size_t size()const; //重载
操作
符 double& operator()(const UINT& uIndex);//重载()运算符,可作
左值
//重载的运算符 double& operator()(const size_t& xr,const size_t& xc);//重载()运算符,可作
左值
C
Vector
& operator=(const C
Vector
&);//重载=运算符 double operator*(const C
Vector
& )const;//重载*运算符,两向量相乘 C
Vector
operator*(const double α)const;//重载*运算符,向量乘以实数alpha C
Vector
& operator*=(const double α);//重载*=算符,向量乘以实数alpha C
Vector
operator+(const C
Vector
& )const;//重载+运算符,向量加上向量 C
Vector
& operator+=(const C
Vector
& );//重载+=算符,向量加上向量 C
Vector
operator-(const C
Vector
& )const;//重载+运算符,向量加上向量 C
Vector
& operator-=(const C
Vector
& );//重载+=算符,向量加上向量 C
Vector
operator+(const double α)const;//重载+运算符,向量加上实数alpna C
Vector
& operator+
自定义的矩阵类,内含源码与测试工程
实现有两个类 C
Vector
存放数据的自定义动态数组,采用一维动态数组存储矩阵数据 CMatrix 实现的矩阵类 使用的时候包含#include "Matrix.h"就行 CMatrix的接口函数都在"Matrix.h"里面 C
Vector
的接口函数在"
Vector
.h"里,"Matrix.h"里包含了"
Vector
.h" 具体用法与测试用例Main.cpp里有3个测试用例,分别是针对构造函数属性计算与运算符重载的 内已包含测试工程xp\vc6.0\上亲测通过,并经过BoundsChecker测试没有内存泄漏。有兴趣的童鞋可以下作参考。 注意: 1、
下标
都是从0开始,数学课上矩阵
下标
都是从1开始,但是工作后习惯0开始,矩阵M的第一个元素是M(0,0) 2、类型定死为double,原来作业是模板类,由于vc6对模版支持不好,另矩阵计算double类比较理想、整型几乎只能作加减 提供了多种初始化方式,int[]、float[]、double[]均可构造初始化,或则先构造出C
Vector
再由C
Vector
初始化。 3、定义了一个最大允许误差#define permit_eof (1.0e-13),判断相等使用宏 #define EQUAL(a,b) ( ((b) - (a) < permit_eof)&&((a) - (b) < permit_eof) ? (TRUE) : (FALSE) ) 正常输出的时候绝对值小于permit_eof 的时候清零处理,想要指定精度输出请用PrintOut 鸣谢:CSDN上supermegaboy君的C/C++
左值
性精髓,读后略有所感,空闲时重构了下大学时的作业,着重区分了函数返回值的左右值 =================================================附录:接口函数========================================================================== 开放的接口: C
Vector
//构造函数 C
Vector
(); virtual ~C
Vector
(); C
Vector
(const size_t &nSize;); C
Vector
(const C
Vector
& vIn);//拷贝构造函数 C
Vector
(const double* const pData,const size_t &nSize;); C
Vector
(const float* const pData,const size_t &nSize;); C
Vector
(const int* const pData,const size_t &nSize;); //公开的成员函数 double at(const size_t& uIndex)const;//作右值 BOOL push_back(const double& dbIn ); BOOL resize(const size_t& nSize); size_t size()const; //重载
操作
符 double& operator()(const UINT& uIndex);//重载()运算符,可作
左值
//重载的运算符 double& operator()(const size_t& xr,const size_t& xc);//重载()运算符,可作
左值
C
Vector
& operator=(const C
Vector
&);//重载=运算符 double operator*(const C
Vector
& )const;//重载*运算符,两向量相乘 C
Vector
operator*(const double α)const;//重载*运算符,向量乘以实数alpha C
Vector
& operator*=(const double α);//重载*=算符,向量乘以实数alpha C
Vector
operator+(const C
Vector
& )const;//重载+运算符,向量加上向量 C
Vector
& operator+=(const C
Vector
& );//重载+=算符,向量加上向量 C
Vector
operator-(const C
Vector
& )const;//重载+运算符,向量加上向量 C
Vector
& operator-=(const C
Vector
& );//重载+=算符,向量加上向量 C
Vector
operator+(const double α)const;//重载+运算符,向量加上实数alpna C
Vector
& operator+=(const double α);//重载+=算符,向量加上实数alpha BOOL operator==(const C
Vector
&)const;//重载==运算符 BOOL operator!=(const C
Vector
&)const;//重载!=运算符 CMatrix //构造函数 CMatrix(); virtual ~CMatrix(); CMatrix(const CMatrix&);//拷贝构造函数 CMatrix(const size_t& n);//产生n阶单位阵 CMatrix(const size_t& nrow, const size_t& ncol);// CMatrix(const size_t& nrow, const size_t& ncol,const C
Vector
& xdata);//产生nrow行,ncol列矩阵数据由xdata初始化 CMatrix(const size_t& nrow, const size_t& ncol,const double*const pData); CMatrix(const size_t& nrow, const size_t& ncol,const float* const pData); CMatrix(const size_t& nrow, const size_t& ncol,const int* const pData); //公开的成员函数 double At(const size_t& xr,const size_t& xc) const;//这个只能作为右值 CMatrix Trans()const;//A.T()返回矩阵A的转置副本 C
Vector
diag()const;//矩阵上三角化后的对角向量//以此求矩阵的秩,矩阵的行列式等 double det()const;//求矩阵行列式 size_t rank()const;//矩阵的秩 CMatrix Inv()const;//求逆矩阵 inline BOOL IsNullMatrix()const{ return (BOOL)(m_nRowlen==0 || m_nCollen == 0);};//是否是空矩阵 BOOL IsSingularMatrix()const;//是否是奇异矩阵//即行列式为0 友函数 //科学计数法输出//想看较精确的数据的时候 friend void void PrintOut(const CMatrix& M,const size_t& nprecision = 6,std::ostream& os = std::cout); //产生的随机方阵,一般会是非异阵,供测试用 friend CMatrix randMatrix(const size_t &uSize;,int MAX);//随机产生n阶的方阵 //--------------------------重载部分-Overloaded Part---------------------------------- CMatrix& operator=(const CMatrix &);//重载=赋值运算符 double& operator()(size_t xr,size_t xc);//重载()运算符,A(i,j)即矩阵A的i行j列的元素, friend std::ostream & operator<<(std::ostream & ,const CMatrix &);//重载<<,可用cout输出矩阵 friend std::ostream & operator<<(std::ostream & ,const C
Vector
&);//重载<<,可用cout输出向量 friend std::istream & operator>>(std::istream & CMatrix &);//重载>>,可用cin输入矩阵 CMatrix operator*(const double α)const;//重载*运算符,矩阵乘以实数alpha C
Vector
operator*(const C
Vector
&)const;//重载*运算符,矩阵乘以向量 CMatrix operator*(const CMatrix &)const;//重载*运算符,矩阵相乘 CMatrix& operator*=(const CMatrix &);//重载*=运算符 CMatrix operator^(const int α)const;//重载^幂运算符,A^alpha,alpha可以为负整数 CMatrix operator+(const CMatrix &)const;//重载+运算符,矩阵相加 CMatrix& operator+=(const CMatrix &);//重载+=运算符 CMatrix operator-(const CMatrix &)const;//重载- CMatrix& operator-=(const CMatrix &);//重载-=运算符 BOOL operator==(const CMatrix &)const;//重载==运算符,判断矩阵是否相等 BOOL operator!=(const CMatrix &)const;//重载!=运算符,判断矩阵是否不相等 C
Vector
operator/(const C
Vector
&)const;//重载/除运算符,向量左除矩阵,求Ax=b的x向量
C++ 语言
65,209
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章