相关疑难解决方法(0)

假设STL向量存储始终是连续的是否安全?

如果你有一个已调整大小的STL向量,是否可以安全地获取元素0的地址并假设其余的向量将跟随内存?

例如

vector<char> vc(100);
// do some stuff with vc
vc.resize(200);
char* p = &vc[0];
// do stuff with *p
Run Code Online (Sandbox Code Playgroud)

c++ stl vector

55
推荐指数
4
解决办法
1万
查看次数

哪个更快/更首选:memset或for循环将双精度数组归零?

double d[10];
int length = 10;

memset(d, length * sizeof(double), 0);

//or

for (int i = length; i--;)
  d[i] = 0.0;
Run Code Online (Sandbox Code Playgroud)

c c++ optimization performance

23
推荐指数
5
解决办法
3万
查看次数

vector&lt;int&gt; 上的 memset

根据Mark Ransoms关于使用 memset 的回答,我在 a 上使用 memsetvector<int>为所有元素分配值。

memset(&match_begin[0], 0xff , sizeof(match_begin[0]) * match_begin.size());
Run Code Online (Sandbox Code Playgroud)

它确实有显着的性能改进,std::fill并且运行良好(g++ 4.3.2,64 位 linux)。这段代码是否安全,如中所示,std::vector 实现是否总是保证数据的内存分配是连续的?在 stl 库的未来(或不同)实现中,这是否有可能在以后更改并破坏我的代码?

c++ stl vector memset

5
推荐指数
1
解决办法
5228
查看次数

如何在 2d 向量上进行 memset

所以我在这里有一个 2D 向量,我想为其分配一个值 num,我想看看作为 C++ 菜鸟的填充与 memset() 哪个更好,我实际上在设置正确的代码语法时遇到了问题,因为我总是在以下情况下遇到分段错误我做。

vector<vector<int>> matrix(10, vector<int>(10000000));
int main()
{
    int num;
    cin >> num;
    int i = 0;
    for (auto &i : matrix)
    {
        fill(i.begin(), i.end(), num); 
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ memset fill 2d-vector

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

标签 统计

c++ ×4

memset ×2

stl ×2

vector ×2

2d-vector ×1

c ×1

fill ×1

optimization ×1

performance ×1