vector<string>和vector<string*>的区别?下面程序答案有几步看不懂请大牛解释下?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
vector<string*> spvec;
// 读取vector对象
string str;
cout << "Enter some strings (Ctrl + Z to end)" << endl;
while (cin >> str) {
string *pstr = new string;//????
*pstr = str; //????
spvec.push_back(pstr);
}
//输出每个string的内容及其相应的长度
vector<string*>::iterator iter = spvec.begin();
while (iter != spvec.end()) {
cout << *(*iter)<< (*iter)->size() << endl;//????
++iter;
}
//释放各个动态分配的string对象
iter = spvec.begin();
while (iter != spvec.end()) {
delete *iter;//??????
++iter;
}
system("pause");
return 0;
return 0;
}
[解决办法]
一个存指针,一个存对象,指针拷贝和对象拷贝性能差很多.
[解决办法]
string *pstr = new string;//???? new 一個對象,基本語法
*pstr = str; //????
改變內容
cout << *(*iter)<< (*iter)->size() << endl;//???? 取出字符串
delete *iter;//?????? 手動刪除,由於push_back的是一個new string,vector自帶的解函數無法自動刪除。
[解决办法]
string *pstr = new string;//创建一个新的string空对象
*pstr = str; //把刚才创建的string赋值为str的值
cout << *(*iter)<< (*iter)->size() << endl;//*iter为string*类型,再进行一次*运算获得string
delete *iter;//释放之前创建的string对象
因为push_back是值传递,这样的写法可以避免push_back时的拷贝构造,但是增加了new和delete的过程,实际上并没有什么好处,反而更难理解
如果不用指针,是这样的写法
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
vector<string> svec;
// 读取vector对象
string str;
cout << "Enter some strings (Ctrl + Z to end)" << endl;
while (cin >> str) {
spvec.push_back(str);
}
//输出每个string的内容及其相应的长度
vector<string>::iterator iter = svec.begin();
while (iter != svec.end()) {
cout << *iter<< iter->size() << endl;
++iter;
}
system("pause");
return 0;
return 0;
}
[解决办法]
string *pstr = new string;
*pstr = str;
拷贝构造的消耗比起这个来还是不如吧,一次构造一次赋值
[解决办法]