标签: std

std :: vector.clear()是否在每个元素上删除(空闲内存)?

考虑以下代码:

#include <vector>

void Example()
{
    std::vector<TCHAR*> list;
    TCHAR* pLine = new TCHAR[20];
    list.push_back(pLine);
    list.clear();    // is delete called here?
    // is delete pLine; necessary?
}
Run Code Online (Sandbox Code Playgroud)

list.clear()是否在每个元素上调用delete?即我必须在list.clear()之前/之后释放内存吗?

c++ std

59
推荐指数
5
解决办法
8万
查看次数

我需要关闭std :: fstream吗?

可能重复:
我是否需要手动关闭ifstream?

我是否需要调用fstream.close()或是fstream一个正确的RAII对象,在销毁时关闭流?

std::ofstream在方法中有一个本地对象.我可以假设退出此方法后文件总是关闭而不调用close吗?我找不到析构函数的文档.

c++ fstream std ofstream

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

零内存的速度比使用memset更快?

我知道这memset(ptr, 0, nbytes)很快,但有更快的方法(至少在x86上)?

我假设memset使用mov,但是当大多数编译器将内存归零时,xor因为它更快,更正确吗?edit1:错了,因为GregS指出只适用于寄存器.我在想什么?

另外我问一个比我更熟悉汇编程序的人看看stdlib,他告诉我x86 memset没有充分利用32位宽的寄存器.然而当时我很累,所以我不太确定我是否理解正确.

edit2:我重新审视了这个问题并进行了一些测试.这是我测试的:

    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    #include <sys/time.h>

    #define TIME(body) do {                                                     \
        struct timeval t1, t2; double elapsed;                                  \
        gettimeofday(&t1, NULL);                                                \
        body                                                                    \
        gettimeofday(&t2, NULL);                                                \
        elapsed = (t2.tv_sec - t1.tv_sec) * 1000.0 + (t2.tv_usec - t1.tv_usec) / 1000.0; \
        printf("%s\n --- %f ---\n", #body, elapsed); } while(0)                 \


    #define SIZE 0x1000000

    void zero_1(void* buff, size_t size)
    {
        size_t i;
        char* foo …
Run Code Online (Sandbox Code Playgroud)

c std

58
推荐指数
6
解决办法
10万
查看次数

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

不明确的过载调用abs(双)

我有以下C++代码:

#include <math.h>
#include <cmath.h>      // per http://www.cplusplus.com/reference/clibrary/cmath/abs/

// snip ...

if ( (loan_balance < 0) && (abs(loan_balance) > loan_payment) ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

make爆炸:

error: call of overloaded 'abs(double)' is ambiguous
Run Code Online (Sandbox Code Playgroud)

也感兴趣:

/usr/include/stdlib.h:785: note: candidates are: int abs(int)
Run Code Online (Sandbox Code Playgroud)

如何指定编译器需要在cmath.h中调用可以处理浮点数的abs()?

编译器信息(不确定这是否重要):

[some_man@some_box ~/some_code]#  gcc -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr    /share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 …
Run Code Online (Sandbox Code Playgroud)

c++ std cmath

56
推荐指数
3
解决办法
10万
查看次数

使用值对std :: map进行排序

我需要std::map按值而不是按键排序.有一个简单的方法吗?

我从下面的线程中得到了一个解决方案:
std :: map按数据排序?
有更好的解决方案吗?

map<long, double> testMap;
// some code to generate the values in the map.

sort(testMap.begin(), testMap.end());  // is there any function like this to sort the map?
Run Code Online (Sandbox Code Playgroud)

c++ dictionary std

56
推荐指数
6
解决办法
13万
查看次数

什么能和不能专注于std命名空间?

允许用户向std命名空间添加显式特化.但是,有一些模板我明确禁止专业化.

我可以和不可以使用哪些模板?

c++ std explicit-specialization c++11

56
推荐指数
1
解决办法
3194
查看次数

将数据从std :: vector写入文本文件的快速方法

我目前从一个向量写一组双打到一个文本文件,如下所示:

std::ofstream fout;
fout.open("vector.txt");

for (l = 0; l < vector.size(); l++)
    fout << std::setprecision(10) << vector.at(l) << std::endl;

fout.close();
Run Code Online (Sandbox Code Playgroud)

但这需要花费大量时间才能完成.有没有更快或更有效的方法来做到这一点?我很乐意看到并学习它.

c++ std ofstream

55
推荐指数
5
解决办法
7870
查看次数

为什么std :: begin和std :: end"不是内存安全"?

这篇博客文章中,Eric Niebler表示:

std :: begin和std :: end有什么问题?惊喜!他们不安全.考虑一下这段代码的作用:

extern std::vector<int> get_data();
auto it = std::begin(get_data());
int i = *it; // BOOM
Run Code Online (Sandbox Code Playgroud)

std :: begin对const和非const lvalues有两个重载.麻烦的是,rvalues绑定到const左值引用,导致上面的悬空迭代器.

我无法理解他的观点,为什么it是一个悬垂的参考.有人能解释一下吗

c++ iterator std c++11

54
推荐指数
3
解决办法
5486
查看次数

从unordered_map获取键和值列表

vector从a获取键和值的列表(作为a )的最有效方法是unordered_map什么?

具体来说,假设有问题的地图是一个unordered_map<string, double>.然后我想把键作为a vector<string>,并将值作为a vector<double>.

unordered_map<string, double> um;

vector<string> vs = um.enum_keys();
vector<double> vd = um.enum_values(); 
Run Code Online (Sandbox Code Playgroud)

我可以遍历地图并收集结果,但是有更有效的方法吗?有一个方法也适用于常规地图会很好,因为我可能会切换到那个.

c++ unordered-map vector std c++11

53
推荐指数
2
解决办法
7万
查看次数