读书人

奇怪的有关问题vector引用的有关问题

发布时间: 2013-08-04 18:26:16 作者: rapoo

奇怪的问题,vector引用的问题,1和2,3打印结果为啥不同


// test_cpp.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <algorithm>
#include "vector"
using namespace std;
//using std::random_shuffle;

struct st_data
{
int a;
int b;
int c;
};

vector<st_data> g_d;
vector<st_data>& get_vector()
{
return g_d;
}
int _tmain(int argc, _TCHAR* argv[])
{
/*vector<st_data> vec;
for (int i=0;i<10;i++)
{
st_data s={i,i,i};
vec.push_back(s);

st_data& s1 = vec[i];
printf("%d,%d,%p\n",i,s1.a,&s1);
}
random_shuffle(vec.begin(), vec.end());// 打乱元素

for (int i=0;i<100;i++)
{
st_data& s = vec[i];
printf("%d,%d,%p\n",i,s.a,&s);
}*/

for (int i=0;i<10;i++)
{
st_data s;
s.a=i;
s.b=i;
s.c=i;
g_d.push_back(s);

//st_data& s1 = g_d[i];
printf("%d,%d,%p\n",i,g_d[i].a,&g_d[i]);//**********1**********
}

vector<st_data>& vec =g_d;
for (int i=0;i<10;i++)
{
//st_data& s1 = vec[i];
printf("%d,%d,%p\n",i,vec[i].a,&vec[i]);//**********2**********

}

vector<st_data>& vec1 =vec;
for (int i=0;i<10;i++)
{
//st_data& s1 = vec[i];
printf("%d,%d,%p\n",i,vec1[i].a,&vec1[i]);//**********3**********

}


system("pause");
return 0;
}



[解决办法]
我这边三次输出都是一样的,可能是你其它那里搞错了吧。

引用:
我想知道为啥两次引用结果不一样

[解决办法]
显然,你在push_back的时候,vector有可能扩容,所以&g_d[0]有可能会变。所以第一个跟后面两个可能不一样
[解决办法]
大神呀,学习了,原来push_back()还会换地址
------解决方案--------------------


学习了,扩容改变地址了

读书人网 >C++

热点推荐