[编程求助]C++中vector插入的是引用而不是值?
代码如下:std::vector<LPCTSTR>strlist;std::vector<LPCTSTR>::iteratorit;strlist.reserve(256...
代码如下:
std::vector<LPCTSTR> strlist;
std::vector<LPCTSTR>::iterator it;
strlist.reserve(256);
while(!m_pRecordset->adoEOF)
{
LPCTSTR strTmp;
char chTmp[256];
sprintf_s(chTmp,(LPCTSTR)((_bstr_t)m_pRecordset->GetCollect("TITLE").GetVARIANT()));
strTmp =(LPCTSTR)chTmp;
strlist.push_back(strTmp);
printf("取到的字符为:%s\n",strTmp);
m_pRecordset->MoveNext();
}
这样我插入的全部是局部变量strTmp的引用于是整个vector都是它
调试的时候发现每当strTmp的值发生改变,容器中所有的值都发生了变化
如果我想插入它的值,应该怎么做呢?
本人java过来的,刚上手还是迷糊
各位小伙伴们,在你们的启发下问题我已经解决了
可能方法不是最好的但是能正确输出了,代码如下
std::vector<char*> strlist;
std::vector<char*>::iterator it;
strlist.reserve(256);
int nLen =0;
while(!m_pRecordset->adoEOF)
{
char chTmp[46][256];
sprintf_s(chTmp[nLen],(char*)((_bstr_t)m_pRecordset->GetCollect("TITLE").GetVARIANT()));
strlist.push_back((char *)chTmp[nLen]);
printf("取到的字符为:%s\n",chTmp[nLen]);
m_pRecordset->MoveNext();
nLen++;
}
因为我知道记录集这一列只有46个值所以可以临时这么用
重点是各位提供的方法压入的都是指针而不是值
chTmp指针始终指向同一块内存,导致所有元素的值都相同
用二维数组可以解决这个问题,谢谢各位! 展开
std::vector<LPCTSTR> strlist;
std::vector<LPCTSTR>::iterator it;
strlist.reserve(256);
while(!m_pRecordset->adoEOF)
{
LPCTSTR strTmp;
char chTmp[256];
sprintf_s(chTmp,(LPCTSTR)((_bstr_t)m_pRecordset->GetCollect("TITLE").GetVARIANT()));
strTmp =(LPCTSTR)chTmp;
strlist.push_back(strTmp);
printf("取到的字符为:%s\n",strTmp);
m_pRecordset->MoveNext();
}
这样我插入的全部是局部变量strTmp的引用于是整个vector都是它
调试的时候发现每当strTmp的值发生改变,容器中所有的值都发生了变化
如果我想插入它的值,应该怎么做呢?
本人java过来的,刚上手还是迷糊
各位小伙伴们,在你们的启发下问题我已经解决了
可能方法不是最好的但是能正确输出了,代码如下
std::vector<char*> strlist;
std::vector<char*>::iterator it;
strlist.reserve(256);
int nLen =0;
while(!m_pRecordset->adoEOF)
{
char chTmp[46][256];
sprintf_s(chTmp[nLen],(char*)((_bstr_t)m_pRecordset->GetCollect("TITLE").GetVARIANT()));
strlist.push_back((char *)chTmp[nLen]);
printf("取到的字符为:%s\n",chTmp[nLen]);
m_pRecordset->MoveNext();
nLen++;
}
因为我知道记录集这一列只有46个值所以可以临时这么用
重点是各位提供的方法压入的都是指针而不是值
chTmp指针始终指向同一块内存,导致所有元素的值都相同
用二维数组可以解决这个问题,谢谢各位! 展开
展开全部
按你java的观点来理解,确实是插入的引用,不是值,但是C++中的引用是另一种概念,strTmp是一个指针,你插入的实际上是指针,其实java的引用类型就是C++的指针类型,你如果只想传递值,你可以这么做std::vector<LPCTSTR> strlist;把其中的LPCTSTR类型改成值的类型,然后插入的时候不要插入strTmp,而是插入*strTmp,即strlist.push_back(*strTmp);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strTmp =(LPCTSTR)chTmp;这行有问题。
字符串拷贝不要直接用“=”,用strCpy或memcpy,你的程序没必要申请2个字符串。
std::vector<char*> strlist;
std::vector<char*>::iterator it;
strlist.reserve(256);
while(!m_pRecordset->adoEOF)
{
//LPCTSTR strTmp;
char chTmp[256];
sprintf_s(chTmp,(char*)((_bstr_t)m_pRecordset->GetCollect("TITLE").GetVARIANT()));
//strTmp =(LPCTSTR)chTmp;
strlist.push_back((char*)chTmp);
printf("取到的字符为:%s\n",chTmp);
m_pRecordset->MoveNext();
}
没取数据库,写的假数据,上述代码,测试后无误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询