关于vector<string*>,一个简短的C++程序,不知道为什么错了。
#include<iostream>#include<string>#include<vector>usingstd::cin;usingstd::cout;usings...
#include<iostream>
#include<string>
#include<vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main()
{
size_t i=0;
vector<string*> pstr;
vector<string> str;
string word;
while(cin>>word)
{
str.push_back(word);
pstr.push_back(&str[i]);//经过我排查问题出现在此处,为什么?
i++;
}
vector<string*>::iterator iter=pstr.begin();
while(iter!=pstr.end()){
//cout<<str[ix]<<str[ix].size()<<endl;
cout<<**iter<<endl<<(**iter).size()<<endl;
iter++;
}
getchar();
}
还有一个问题,vector<string*> pstr;和vector<string> *pstr;有什么区别,如何解释。 展开
#include<string>
#include<vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main()
{
size_t i=0;
vector<string*> pstr;
vector<string> str;
string word;
while(cin>>word)
{
str.push_back(word);
pstr.push_back(&str[i]);//经过我排查问题出现在此处,为什么?
i++;
}
vector<string*>::iterator iter=pstr.begin();
while(iter!=pstr.end()){
//cout<<str[ix]<<str[ix].size()<<endl;
cout<<**iter<<endl<<(**iter).size()<<endl;
iter++;
}
getchar();
}
还有一个问题,vector<string*> pstr;和vector<string> *pstr;有什么区别,如何解释。 展开
3个回答
展开全部
错误的原因是因为:
str.push_back(word); //此时在不断地插入新的节点时会导致内存重新分配,所以你的下一句保存上面的指针就没有意义了,因为上面的内存地址已经失效了。
建议你看下vector.push_back的源码就清楚了,vector本身是线性存储的,push_back会根据当前的容量来进行几何级数的膨胀,保存vector里面的地址的指针是没有意义的。除非你的vector稳定下来后你再保存就可以了。
vector<string*> 表示一个vector容器,容器里面的节点是一个string对象的地址(也就是一个int),这个容器可以存储很多个这样的节点。
vector<string> * pstr表示一个容器指针,这个容器指针所指向的容器里面的节点是一个string对象,同样,这个容器指针所指向的窗口也可以存储很多个string对象。
str.push_back(word); //此时在不断地插入新的节点时会导致内存重新分配,所以你的下一句保存上面的指针就没有意义了,因为上面的内存地址已经失效了。
建议你看下vector.push_back的源码就清楚了,vector本身是线性存储的,push_back会根据当前的容量来进行几何级数的膨胀,保存vector里面的地址的指针是没有意义的。除非你的vector稳定下来后你再保存就可以了。
vector<string*> 表示一个vector容器,容器里面的节点是一个string对象的地址(也就是一个int),这个容器可以存储很多个这样的节点。
vector<string> * pstr表示一个容器指针,这个容器指针所指向的容器里面的节点是一个string对象,同样,这个容器指针所指向的窗口也可以存储很多个string对象。
展开全部
pstr.push_back(&word);//
vector<string*> pstr; 存放的是字符串指针
vector<string> *pstr; 存放的是字符串,而pstr是指针
vector<string*> pstr; 存放的是字符串指针
vector<string> *pstr; 存放的是字符串,而pstr是指针
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的szbhzc回答的很不错了,如果想让这个程序正确运行,那么可以在创建str这个vector后就调用str.reserve(n)这个函数给vector预留n个元素的空间,那么在push_back时如果元素个数不超过n,str内元素的内存地址就不会发生改变。比如调用str.reserve(100),那么只要插入的元素个数不超过100,那么str元素的内存地址就不会改变。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询