作者easterday (....)
看板C_and_CPP
标题[问题] 问一个可能算基本的STL使用...
时间Thu Jan 5 18:18:20 2017
开发平台(Platform): (Ex: Win10, Linux, ...)
Win8
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VC2008
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
STL
问题(Question):
我想问为什麽以下的程式码跑起来在建立obj2时会有错误...
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void println(const vector<int>& that)
{
for (int i=0; i<that.size(); i++)
{
cout<< that[i]<<",";
}
cout<<endl;
}
class A
{
public:
A();
vector<int> Value;
};
class B
{
public:
vector<int> Value;
B(const A&);
};
A::A()
{
}
B::B(const A& inn)
{
std::copy(inn.Value.begin(), inn.Value.end(), Value.begin());
}
int main()
{
A obj1;
obj1.Value.push_back(1);
obj1.Value.push_back(2);
obj1.Value.push_back(3);
println(obj1.Value);
B obj2(obj1); //这里会跳Debug Assertion Fail...
println(obj2.Value);
return 0;
}
喂入的资料(Input):
none...
预期的正确结果(Expected Output):
none...
错误结果(Wrong Output):
"Debug Assertion Fail"
程式码(Code):(请善用置底文网页, 记得排版)
已经贴了..
补充说明(Supplement):
--
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.254.8.178
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1483611503.A.090.html
1F:→ shadow0326: 你要先Value.resize(inn.Value.size()) 再copy 01/05 18:37
2F:→ shadow0326: 或是直接B(const A& inn):Value(inn.Value){} 01/05 18:38
3F:推 ko27tye: std::copy()不会帮你申请空间 只有复制行为 01/05 19:27