gpt4 book ai didi

c++ - 如何正确使用结构中的 const 字符串指针?

转载 作者:行者123 更新时间:2023-11-28 00:32:16 25 4
gpt4 key购买 nike

你好,我有一个带有 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;
};

谢谢你的建议。

最佳答案

I got there pointers because I dont want to create local copies of strings and my question is how to correctly work with with values of these strings.

老实说,在那种情况下使用指针会很麻烦。主要是因为指针并不像人们想象的那么容易使用。看看你现在拥有的代码。它有问题,因为例如,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com