这个问题试图收集每年出版的数十本不良C++书籍中的少数珍珠.
与许多其他编程语言不同,这些编程语言经常从互联网上的教程中随处获取,很少有人能够快速学习C++,而无需学习编写精良的C++书籍.这样做太复杂了.事实上,它是如此庞大和复杂,有很多非常糟糕的C++书籍.我们并不是在谈论糟糕的风格,而是体育明显的事实错误和促进糟糕的编程风格.
请编辑接受的答案,以提供高质量的书籍和近似的技能水平 - 最好 在 C++聊天室讨论您的添加后.(如果他们不同意建议,常客可能会毫不留情地撤销你的工作.)添加一篇关于你亲自阅读/受益的每本书的简短描述/描述.随意讨论质量,标题等.符合标准的书籍将被添加到列表中.由C和C++用户协会(ACCU)撰写评论的图书都有指向评论的链接.
*注意:常见问题和其他资源可以在C++标签信息和c ++ - faq中找到.
我在我的代码中使用向量
std::vector<CEventLogInfo >
class CEventLogInfo
{
// date and time
unsigned short m_sMonth;
unsigned short m_sDay;
unsigned int m_nYear;
unsigned short m_sHour;
unsigned short m_sMin;
unsigned short m_sSec;
unsigned long m_nGatewayMacID;
unsigned char m_byCommandType;
unsigned char m_byStatus;
unsigned char m_byEventName;
unsigned char m_byDirection;
unsigned short m_nPacketLen;
char* m_pPacket;
// ..some method
}
CEventLogInfo::CEventLogInfo(const CEventLogInfo& refMessage)
{
m_sMonth = refMessage.m_sMonth;
m_sDay = refMessage.m_sDay;
m_nYear = refMessage.m_nYear;
m_sHour = refMessage.m_sHour;
m_sMin = refMessage.m_sMin;
m_sSec = refMessage.m_sSec;
m_nGatewayMacID = refMessage.m_nGatewayMacID;
m_byCommandType = refMessage.m_byCommandType; …Run Code Online (Sandbox Code Playgroud) 我试图用称为细胞的对象填充二维向量(817乘577).这些单元格具有一组成员值(浮点数,其他向量等).在某个时刻程序停止并抛出错误"vector<T> too long".这是单元格的类定义和完整的循环:
struct cell
{
int x;
int y;
int country;
vector<int> popO;
vector<int> popS;
vector<float> Rainfall;
double Cropland;
vector<movement> outm;
vector<movement> inm;
vector<double> AgeMaleFemale;
vector<double> AgeMaleFemaleMortality;
double Fertility;
};
vector<vector<cell>> cells;
void fillCells(dataserver D)
{
cout<<"start filling"<<endl;
int rows=577;
int columns=817;
cell X;
vector<vector<cell>> output(rows,vector<cell>(columns,X));
cout<<"start loop"<<endl;
for (int i=0;i<rows;i++)
{
cout<<i<<" ";
for (int j=0;j<columns;j++)
{
int p=-9999;
cell tmpC;
tmpC.x=i;
tmpC.y=j;
tmpC.country=D.CO[i][j];
tmpC.popO.resize(3,0);
tmpC.popO[0]=int(D.PO[0][i][j]);
tmpC.popO[1]=int(D.PO[1][i][j]);
tmpC.popO[2]=int(D.PO[2][i][j]);
tmpC.Rainfall.resize(10,0);
for (int k=0;k<10;k++)
{
tmpC.Rainfall[k]=D.R[k][i][j];
}
tmpC.popS.resize(10,0); …Run Code Online (Sandbox Code Playgroud)