您好,我有一个带有const字符串指针的结构:
struct something{
something(const string & a, const string &b)
{
first=&a;
second=&b;
}
const string * first;
const string * second;
int somethingelse;
};
我到达那里是因为我不想创建字符串的本地副本,所以我的问题是如何正确使用这些字符串的值,我需要执行诸如比较字符串之类的操作。我试图这样做:
vector<something> myvec;
something tmp1("hello","world");
something tmp2("hello","world");
myvec.push_back(tmp1);
myvec.push_back(tmp2);
cout << *myvec[0].first;
if((*(myvec[0].first)+*(myvec[0].second))==(*(myvec[1].first)+*(myvec[1].second)))
cout << '1';
但是它并不是真的可以工作,并且valgrind存在很多问题。
将不胜感激任何建议。
编辑:---------------->
好的,大家大概对我确实需要对字符串进行本地复制这一事实是正确的。我实际上发现在我的程序中制作本地副本并不是真正的问题。问题是字符串之间的比较。
我到达了一个具有很多比较功能的排序算法:
if(((myvec[0].first)+(myvec[0].second))==((myvec[1].first)+(myvec[1].second)))
要么
if(((myvec[0].first)+(myvec[0].second))<(string1+string2))
造成大量临时子字符串并使程序运行缓慢的原因。我修复了将字符串链接到一个字符串中的问题,这使得比较变得明显更快。
struct something{
something(const string & a, const string &b)
{
firstsecond=a+'|'+b;
}
string firstsecond;
int somethingelse;
};
谢谢你的建议顺便说一句。
最佳答案
我到达那里是因为我不想创建字符串的本地副本,所以我的问题是如何正确使用这些字符串的值。
老实说,在这种情况下使用指针将是一团糟。主要是因为指针并不像人们想象的那样容易使用。只需看看您现在拥有的代码即可。这是有问题的,因为例如something
的默认构造函数将复制指针,从而有效地在两个something
对象之间共享字符串。
我建议完全删除指针,并忽略此“性能”问题,直到您真正证明应用程序的瓶颈在于字符串的复制为止:
struct something {
something(const string & a, const string &b)
{
first = a;
second = b;
}
const string first;
const string second;
int somethingelse;
};
关于c++ - 如何正确使用结构体中的const字符串指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22443367/