是否vector::push_back()进行浅拷贝&如何解决这个问题
Is vector::push_back() making a shallow copy & how to solve this
在我正在编写的程序中,我有类似于这里的代码:
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
struct people
{
string name;
int st;
int sn[50];
};
int main()
{
unsigned int n,ST[10]={25,18,15,12,10,8,6,4,2,1};
vector<people> master;
cin>>n;
for (int i=0;i<n;i++)
{
unsigned int m;
cin>>m;
for (int j=0;j<m;j++)
{
people youngling; //I am declaring it here, but it doesn't solve the issue
string s;
cin>>s;
for (int l=0;l<master.size();l++)
{
if (master[l].name.compare(s)==0)
{
if (j<10) master[l].st+=ST[j];
master[l].sn[j]++;
goto loop;
}
}
youngling.name=s;
if (j<10) youngling.st=ST[j];
for (int l=0;l<50;l++) youngling.sn[l]=0;
youngling.sn[j]++;
master.push_back(youngling);
loop:;
}
}
}
正如你所看到的,我将一个结构体(people youngling
)推回一个向量(vector<people> master
)。然而,这段代码给了我错误的结果,我认为这可能是由结构和浅复制问题引起的。这在某种程度上得到了证明,因为如果我使用一个完整的people
数组来存储输入,那么答案是正确的。但我对此感到困惑:
- 结构只是一个指向编译器的指针,或者为什么存在这种浅拷贝问题?
- 我在内部循环中声明
people youngling
,希望解决这个问题,但没有用。有什么简单的方法来纠正上面的代码片段吗? - 当我使用GCC 4.4测试小案例时,答案似乎是正确的。然而,当我使用gnu c++ 0X测试它时,答案是错误的。这是编译器特有的问题吗?
注意:我不能提供错误的测试用例,因为我正在使用一个法官系统在线测试它。
push_back
正在使用复制构造函数复制插入的对象。如果没有自定义的(比如你的struct),默认情况下只是复制所有字段,使用它们自己的复制构造函数等。
对于包含字符串和基本类型的固定大小数组的结构体,result应该等同于深度复制。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- Ardunio UNO解决了多个重叠的定时器循环
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 两个文件使用彼此的功能-如何解决
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 在java中解决这段代码时面临循环中的问题
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 难以理解某些人解决IOI问题的源代码
- visual c++,如何获取解决方案目录中的代码
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 节俭并发:未解决的外部问题
- IpOpt拒绝解决不受约束的问题
- 如何解决这个超硬恒星的创造问题
- 循环无限运行C++解决骑士之旅问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 为什么这段代码不起作用,我该如何解决?