相关疑难解决方法(0)

调用std :: vector :: clear()会将std :: vector :: capacity()设置为零吗?

如果我在向量上使用.reserve(items),向量将分配足够的内存来猜测我需要的项目数.

如果我以后使用.clear(),那么只清除向量还是保存我之前定义的保留?

谢谢.

c++ stl vector

45
推荐指数
3
解决办法
2万
查看次数

为什么不vector :: clear从向量中删除元素?

当我clear()在a上使用std::vector它时,它应该销毁它中的所有元素vector,而不是它.

示例代码:

vector<double> temp1(4);
cout << temp1.size() << std::endl;
temp1.clear();
cout << temp1.size() << std::endl;

temp1[2] = 343.5; // I should get segmentation fault here ....

cout << "Printing..... " << temp1[2] << endl;
cout << temp1.size() << std::endl;
Run Code Online (Sandbox Code Playgroud)

现在,我应该在尝试访问已清除的向量时遇到分段错误,但是它会填充那里的值(据我说这是非常错误的)

结果如下:

4
0
Printing..... 343.5
0
Run Code Online (Sandbox Code Playgroud)

这是正常的吗?这是一个非常难以发现的错误,它基本上杀了我的代码数月.

c++ stdvector undefined-behavior

31
推荐指数
5
解决办法
4310
查看次数

`std :: vector <primitive> :: clear()`是一个恒定时间操作吗?

调用clear()向量将调用存储在向量中的任何内容的析构函数,这是一个线性时间操作.但是,当向量包含原始类型如intdouble

c++ stl vector clear

11
推荐指数
2
解决办法
539
查看次数

std :: deque比std :: vector更快插入到最后?

我开始比较:

  • 插入列表的前面
  • 插入向量的背面
  • 插入一个双端队列的前面

但后来我注意到即使在push_back()deque上似乎也更快.我必须做一些错误的,我不能相信一个更一般的容器也不太可能超过一个特定的一个.

我使用谷歌基准测试的代码:

#include "benchmark/benchmark.h"
#include <deque>
#include <vector>

#define NUM_INS 1000

static void BM_InsertVector(benchmark::State& state) {
    std::vector<int> v;
    v.reserve(NUM_INS);
    while (state.KeepRunning()) {
        state.PauseTiming();
        v.clear();
        state.ResumeTiming();
        for (size_t i = 0; i < NUM_INS; i++)
            v.push_back(i);
    }
}
BENCHMARK(BM_InsertVector);

static void BM_InsertDeque(benchmark::State& state) {
    std::deque<int> v;
    while (state.KeepRunning()) {
        state.PauseTiming();
        v.clear();
        state.ResumeTiming();
        for (size_t i = 0; i < NUM_INS; i++)
            v.push_back(i);
    }
}
BENCHMARK(BM_InsertDeque);

BENCHMARK_MAIN();
Run Code Online (Sandbox Code Playgroud)

结果:

Run on (1 X 2592 MHz …
Run Code Online (Sandbox Code Playgroud)

c++ stl

9
推荐指数
1
解决办法
1220
查看次数

vector :: erase会减少vector :: capacity吗?

Cppreference只说:

从容器中删除指定的元素.1)删除pos处的元素.2)删除范围内的元素[first; 持续).

在擦除点或之后使迭代器和引用无效,包括end()迭代器.

迭代器pos必须是有效且可解除引用的.因此,end()迭代器(有效但不可解除引用)不能用作pos的值.

如果first == last,迭代器首先不需要是可解除引用的:擦除空范围是无操作.

c++ vector language-lawyer

3
推荐指数
2
解决办法
427
查看次数

C++ STD 容器:std::vector - 有没有办法清除向量并保留存储分配?

有没有办法std::vector在保留内存分配的同时清除内容?

这样做的原因是我有一段代码循环,我希望优化它。我目前将数据存储在std::vectors 中。每次循环开始时,应清除向量的内容。然后我使用push_back将数据输入到向量中,但是由于向量的长度在循环的迭代之间通常不会改变,我理想情况下希望向量将其分配的存储保留在内存中。

如果这是不可能的,vector是否可以使用另一种快速访问 STD 类型?

c++ stl vector

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