关于vector的pushback()

sunjiafujixerox 2008-03-10 09:13:13
struct NODE{
double i;
double j;
NODE() {
i=0;
j=0;
}
NODE( const NODE &node){
i=node.i;
j=node.j;
}
};
class LocalNode{
public:
NODE A;
int dist;// the correlation number
LocalNode() {
A.i=0;
A.j=0;
dist=0;
}
LocalNode( const LocalNode& RightSides){
dist=RightSides.dist;
A.i=RightSides.A.i;
A.j=RightSides.A.j;
}
setR( const NODE a,const int c){
A.i=a.i;
A.j=a.j;
dist=c;
}
LocalNode& operator = ( LocalNode const& a ){
if( this != &a ){
A.i=a.A.i;
A.j=a.A.j;
dist=a.dist;
}
return *this;
}
bool operator < (const LocalNode &m)const {
return dist< m.dist;
}
bool operator > (const LocalNode &m)const {
return dist> m.dist;
}
bool operator == (const LocalNode &m)const {
return dist== m.dist;
}
};

main (){
NODE p;
vector <NODE> vect;
for(i=0;i<10;i++){
p.i=i;
p.j=2*i;
vect.pushback(p);
}

vector<LocalNode> local_node ;

LocalNode node;
int NUM=vect.size();
local_node.reserve(NUM);

for(int num = 0 ; num < NUM; num ++) {// for all the feature point
i=vect[num].i;
j=vect[num].j;


local_node.clear();

for(int lnum = 0 ;lnum < vect.size(); lnum ++){
if(num==lnum){}
else{

dist=abs(i-vect[lnum].i)+abs(j-vect[lnum].j);
node.dist=dist;
node.A.i=vect[lnum].i;
node.A.j=vect[lnum].j;
local_node.push_back(node);
}

}
}
return;
}
这个程序在第二个pushback的时候会出错,请问一下各位大牛为什么。
...全文
337 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunjiafujixerox 2008-03-10
  • 打赏
  • 举报
回复
按照道理,我在NODE和LocalNode里面都定义了拷贝构造函数,还有哪里有问题呢
sunjiafujixerox 2008-03-10
  • 打赏
  • 举报
回复
对不起,我的原始程序太长了,没有全部贴出来。
其实vect的赋值函数是乱写的。
第二个pushback,报错的时候,程序停在
LocalNode( const LocalNode& RightSides){
dist=RightSides.dist;
A.i=RightSides.A.i;
A.j=RightSides.A.j;
}
拷贝构造函数这一行。
Supper_Jerry 2008-03-10
  • 打赏
  • 举报
回复
汗。。我说错了
pushback的时候调用的是拷贝构造函数
而不是operator=。
Supper_Jerry 2008-03-10
  • 打赏
  • 举报
回复
你的程序我无法调试,从你的程序看来
问题很可能处在你重载了=操作符
而且使用了 if( this != &a ){
所以第二次的时候发现两者相等。
所以可以修改为把
for(i=0;i <10;i++){
p.i=i;
p.j=2*i;
vect.pushback(p);
}
for循环内部定义NODE P
星羽 2008-03-10
  • 打赏
  • 举报
回复

#include "iostream"
#include "vector"
using namespace std;

struct NODE{
double i;
double j;
NODE() {
i=0;
j=0;
}
NODE( const NODE &node){
i=node.i;
j=node.j;
}
};
class LocalNode{
public:
NODE A;
int dist;// the correlation number
LocalNode() {
A.i=0;
A.j=0;
dist=0;
}
LocalNode( const LocalNode& RightSides){
dist=RightSides.dist;
A.i=RightSides.A.i;
A.j=RightSides.A.j;
}
void setR( const NODE a,const int c){
A.i=a.i;
A.j=a.j;
dist=c;
}
LocalNode& operator = ( LocalNode const& a ){
if( this != &a ){
A.i=a.A.i;
A.j=a.A.j;
dist=a.dist;
}
return *this;
}
bool operator < (const LocalNode &m)const {
return dist < m.dist;
}
bool operator > (const LocalNode &m)const {
return dist> m.dist;
}
bool operator == (const LocalNode &m)const {
return dist== m.dist;
}
};

void main (){
NODE p;
vector <NODE> vect;
for(int i=0;i <10;i++){
p.i=i;
p.j=2*i;
vect.push_back(p);
}

vector <LocalNode> local_node ;

LocalNode node;
int NUM=vect.size();
local_node.reserve(NUM);

for(int num = 0 ; num < NUM; num ++) {// for all the feature point
double i=vect[num].i;
double j=vect[num].j;


local_node.clear();

for(int lnum = 0 ;lnum < vect.size(); lnum ++){
if(num==lnum){}
else{

int dist=abs(i-vect[lnum].i)+abs(j-vect[lnum].j);
node.dist=dist;
node.A.i=vect[lnum].i;
node.A.j=vect[lnum].j;
local_node.push_back(node);
}

}
}
return;
}

64,180

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧