gpt4 book ai didi

c++ - 关于 C++ 中 STL 填充函数的问题

转载 作者:行者123 更新时间:2023-11-30 03:11:30 25 4
gpt4 key购买 nike

假设我有一个这样的数组:

string x[2][55];

如果我想用“-1”填充它,这是正确的方法吗:

fill(&x[0][0],&x[2][55],"-1");

当我尝试运行它时,它崩溃了。如果我将 x[2][55] 更改为 x[1][54] 它可以工作但它不会初始化数组的最后一个元素。

举个例子来证明我的观点:

  string x[2][55]; 
x[1][54] = "x";
fill(&x[0][0],&x[1][54],"-1");
cout<<x[1][54]<<endl; // this print's "x"

最佳答案

因为当你有一个多维数组时,超出第一个元素的地址在计算时有点困惑。简单的答案是你这样做:

&x[1][55]

让我们考虑一下二维数组 x[N][M] 在内存中的布局

[0][0] [0][1] ... [0][M-1] [1][0] [1][1] ... [1][M-1] [N-1][0] .. [N-1][M-1]

因此,最后一个元素是 [N-1][M-1],第一个元素是 [N-1][M]。如果您获取 [N][M] 的地址,那么您会超出结尾很远,并且会覆盖大量内存。

另一种计算超出末尾的首地址的方法是使用 sizeof。

&x[0][0] + sizeof(x) / sizeof(std::string);

关于c++ - 关于 C++ 中 STL 填充函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2217568/

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