相关疑难解决方法(0)

为什么地址不一样?

为了理解指针,我编写了下面的代码。

#include <cstdio>
#include <iostream>
using namespace std;

int main() {
    string a = "hello";
    const char *st = &a[0];
    printf("%p\n", &st[0]);
    printf("%p\n", &(a[0]));
    printf("%c\n", *st);
    printf("%p", &a);
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出

0x1265028
0x1265028
h
0x7ffe26a91c40
Run Code Online (Sandbox Code Playgroud)

如果我的理解是正确&a的应该返回字符串的地址,为什么返回的值与&a其余的不同?

c++ pointers stdstring memory-address

1
推荐指数
2
解决办法
152
查看次数

禁用std:string的SSO

我想知道是否有一种方法可以以编程方式禁用字符串SSO,使其不使用本地缓冲区作为短字符串?
请问,为什么我需要这个.我很好,如果不能关闭只是想确定.

c++ string stdstring

0
推荐指数
1
解决办法
648
查看次数

在使用std :: string和字符数组之间进行选择

我读过性能方面的字符数组比std :: string更好/更快。但是我个人觉得使用std :: string更容易。

我目前正在编写一些数据库API,这些API会将数据提取/插入数据库中。在这些API中,我想使用std字符串,但是我不确定由于我的选择我会付出多少性能损失。我的API将查询数据库,因此将涉及网络IO。

性能损失是否比网络延迟(〜10 ms)少得多,因为在这种情况下,我很乐意使用std :: string。

c++

0
推荐指数
1
解决办法
186
查看次数

如果我可以访问单个字符,为什么我的字符串为空?

我是 C++ 新手,最近通过 u-demy 讲座学习了指针和参考资料。讲座结束后,我正在解决使用单独的函数反转字符串的问题。我想出了一个代码,但由于某种原因,我可以使用 [] 表示法访问单个字符(就像reverse[0]等于!)但是当我打印整个字符串时,我得到一个空字符串?是什么导致了这个问题?

提前感谢您的宝贵时间!

这里我粘贴了我的代码:

#include <iostream>
// using namespace std;

std::string reverse_string(const std::string &str) {
    std::string reversed;

    size_t size {str.length()};
    for(int i{}; i < size/2; i++) {
        reversed[i] = str[(size-1)-i];
        reversed[(size-1)-i] = str[i];
    }
    
    return reversed;
}

int main() {
    // Write C++ code here
    std::string input = "Hello, World!";
    std::string reversed = reverse_string(input);
    std::cout << reversed << std::endl;  //I get nothing, BUT
    std::cout << reversed[0] << std::endl //here I do get a …
Run Code Online (Sandbox Code Playgroud)

c++ stdstring

0
推荐指数
1
解决办法
121
查看次数

C++ - std :: string :: ~string()字符串仍然可以打印为空值

当我和std::string我一起去的时候,我决定做以下事情:

int main(int argc, char **argv)
{
    std::string s = "Hello World";
    s.~basic_string();
    std::cout << s.c_str();
}
Run Code Online (Sandbox Code Playgroud)

但是,它什么都不打印,没有垃圾.但是,在我的 basic_string课堂上,当调用析构函数时,我会得到垃圾.怎么std::string办呢?我使用an allocatorconstructs,destroys,allocates和deallocates,但它仍然不起作用.

注意:我不是在寻找班级的解决方案,而是要了解std::string它是如何做到的.

c++ string

-1
推荐指数
1
解决办法
98
查看次数

为什么 sizeof array(type string) 是 24 字节,只有一个空格元素?

我遇到了一个问题,我需要找到数组的大小来确定数组的长度。我的理解是一个字符是 1 个字节,一个字符串是 2 个字节('\0'字符的额外字节)。

但是,我发现字符串数组的单个元素是 24 个字节。

我输出了一个字符串、字符和整数变量的大小来验证我的理解。我对 int、char 和 string 数组的单个元素做了同样的处理。

#include <iostream>

using namespace std;


int main()
{
    string strArr[1] = {" "};
    
    cout
        << sizeof " " << endl
        << sizeof strArr[0] << endl
        << sizeof strArr << endl << endl;
    
    char charArr[1] = {'a'};
    
    cout
    << sizeof 'a' << endl
    << sizeof charArr[0] << endl
    << sizeof charArr << endl << endl;
    
    int intArr[1] = {1};
    
    cout
        << sizeof 1 << endl
        << …
Run Code Online (Sandbox Code Playgroud)

c++ arrays string

-2
推荐指数
1
解决办法
906
查看次数

在程序变得低效之前,允许多少 new[] 和 delete[] 分配有限制吗?

我不确定以前是否有人问过这个问题,所以我会试一试。

我有用于加载大客户列表(20 万个客户)的代码。每个客户端都存储在一个(当前)固定大小的结构中,其中包含他的姓名、地址和电话号码,如下所示:

struct client {
    char name[80];
    char address[80];
    char phonenumber[80];
};
Run Code Online (Sandbox Code Playgroud)

如您所见,该结构的大小为 240 字节。因此,200k 客户端将占用 48MB 内存。显然,这种结构的优点是易于管理并为回收客户创建“免费列表”。但是,如果明天我需要加载 5M 客户端,那么这将增长到 1.2Gb 的 RAM。

现在,显然在大多数情况下,客户的姓名、地址和电话号码占用的空间远少于 80 个字节,因此我想到使用如下结构代替上述结构:

struct client {
    char *name;
    char *address;
    char *phonenumber;
};
Run Code Online (Sandbox Code Playgroud)

然后让 *name、*address 和 *phonenumber 指向以确切所需大小动态分配的结构,用于存储每个信息。

然而,我确实怀疑,随着更多客户端以这种方式加载,它会大大增加所需的 new[] 和 delete[] 分配的数量,我的问题是这是否会在某些时候损害性能,例如,如果我想突然删除 1M 客户端中的 500k 并用 350k 不同客户端替换它们?

我怀疑在我分配了 1M 个“可变长度”小缓冲区之后,如果我“删除”其中的许多缓冲区,然后想要创建新的分配来回收已删除的那些,是否会导致分配器的一些开销找到他们?

c++ memory

-2
推荐指数
1
解决办法
130
查看次数

标签 统计

c++ ×7

stdstring ×3

string ×3

arrays ×1

memory ×1

memory-address ×1

pointers ×1