奇怪的问题,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()还会换地址
------解决方案--------------------
学习了,扩容改变地址了