相关疑难解决方法(0)

我是否应该优先选择数组而不是向量?

可能重复:
std :: vector比普通数组慢得多?

看起来像vector在堆而不是堆栈上分配.

因此,当性能成为严重问题时,我是否应该考虑使用数组来替换向量(如果可能)?

c++ arrays performance stl vector

5
推荐指数
2
解决办法
4875
查看次数

从文件中读取整数 - 逐行

如何在 C++ 中将文件中的整数读取到整数数组?例如,该文件的内容:

23
31
41
23
Run Code Online (Sandbox Code Playgroud)

会成为:

int *arr = {23, 31, 41, 23};
Run Code Online (Sandbox Code Playgroud)

我实际上有两个问题。首先,我真的不知道如何逐行阅读它们。对于一个整数来说,这非常简单,只需file_handler >> number语法即可完成此操作。我该如何逐行执行此操作?

对我来说似乎更难克服的第二个问题是 - 我应该如何为这个东西分配内存?:你

c++

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

是否可以在std :: unique <T []>上应用std :: sort?

假设我有一个我要排序的动态数组,我可以做

std::vector<int> v(100);
for (int i = 0; i < 100; i++) v[i] = rand();
std::sort(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)

但对于性能关键代码,初始化开销是不可接受的,更多细节请访问/sf/answers/508836191/

我也可以

int *v = new int[100];
for (int i = 0; i < 100; i++) v[i] = rand();
std::sort(v, v + 100);
Run Code Online (Sandbox Code Playgroud)

但是必须自己管理内存必然会在大型代码库中发生内存泄漏.

所以似乎最可行的方法是

std::unique_ptr<int[]> v(new int[100]);
for (int i = 0; i < 100; i++) v[i] = rand();
std::sort(v, v + 100);
Run Code Online (Sandbox Code Playgroud)

没有初始化开销也不需要担心内存管理,但这会返回一个很长的编译错误.有人能让我知道我做错了什么吗?

我在Ubuntu 14.04,GCC作为编译器.

编辑:更改代码,以便数据尚未排序

c++ heap-memory unique-ptr c++11

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

自动解除分配数组?

我正在寻找一种方法来自动释放一个wchar_ts 数组- 有点像autopointer(我真的没有使用std :: auto_ptr,但我认为它不能用于数组).

我现在的代码是这样的:

/* volume is of type wstring,
 * hr is of type HRESULT, 
 * VSS_PWSZ equals wchar_t* 
 */

VSS_PWSZ pwszVolume = new wchar_t[volume.size() + 1];
std::copy(volume.begin(), volume.end(), &pwszVolume);
pwszVolume[volume.size()] = 0;

hr = pDiffMgmt->QueryDiffAreasOnVolume(pwszVolume, &pEnumMgmt);

delete[] pwszVolume;
pwszVolume = NULL;
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么这个愚蠢的功能不能采取const wchar_t*,否则我可以通过volume.c_str().

到目前为止这么好,我认为我的代码解决了这个问题,但现在内存管理变得越来越复杂了:我必须复制delete[]代码来解决可能抛出的异常(我不想在这一点上抓住它) .)

有没有办法pwszVolume在剩下当前范围时自动解除分配?

c++ memory-management

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

将动态数组元素初始化为零

对于固定阵列,

  // will initialize the missing elements to 0 as well
   A[max_row][max_col] = {0,} 
Run Code Online (Sandbox Code Playgroud)

我们能否在动态数组中实现这一点(特别是多维)?

侧面问题:如果我们不能,并且我们被迫使用嵌套循环,那么上面的技巧的初始化时间与嵌套循环初始化相比如何?


我不想矢量,否则这个问题毫无意义.谢谢你的建议:)

c++ arrays initialization

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

转换位数组以更快地设置

输入是存储在连续存储器中的比特阵列,每1比特存储器具有1比特的比特阵列.

输出是比特阵列的设定位索引的数组.

例:

bitarray: 0000 1111 0101 1010
setA: {4,5,6,7,9,11,12,14}
setB: {2,4,5,7,9,10,11,12}
Run Code Online (Sandbox Code Playgroud)

获得A组或B组都可以.该集存储为uint32_t数组,因此该集的每个元素都是数组中的无符号32位整数.

如何在单个cpu核心上快5倍左右?

当前代码:

#include <iostream>
#include <vector>
#include <time.h>

using namespace std;

template <typename T>
uint32_t bitarray2set(T& v, uint32_t * ptr_set){
    uint32_t i;
    uint32_t base = 0;
    uint32_t * ptr_set_new = ptr_set;
    uint32_t size = v.capacity();
    for(i = 0; i < size; i++){
        find_set_bit(v[i], ptr_set_new, base);
        base += 8*sizeof(uint32_t);
    }
    return (ptr_set_new - ptr_set);
}

inline void find_set_bit(uint32_t n, uint32_t*& ptr_set, uint32_t base){
    // Find the set bits …
Run Code Online (Sandbox Code Playgroud)

c++ sse bit-manipulation set bitarray

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

访问数组比访问向量更快吗?

可能重复:
使用数组或std ::向量C++,有什么性能上的差距?
std :: vector比普通数组慢得多?

memory是1000个元素的向量array []是一个1000个元素的整数数组

for (iteration = 0; iteration < numiterations; iteration++) {
    for (j = 1; j < numints; j++) {
       memory[j] += memory[j - 1];
       //array[j] += array[j - 1];
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我跑100次迭代后比较for循环的时间,相比于载体的用于访问所需的时间是非常小

为什么会这样?因为我认为两者都需要不变且几乎相同的时间..

c++ arrays stdvector

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

C/C++用一个值填充struct数组

我想用相同的值填充MyStruct数组.如何以最快和最简单的方式完成?我正在运行相当低级的方法,比如memsetmemcpy.

编辑:std::fill_n确实符合并且工作正常.但它是C++的方式.如何在纯C中完成?

struct MyStruct
{
    int a;
    int b;
};

void foo()
{
    MyStruct abc;
    abc.a = 123;
    abc.b = 321;

    MyStruct arr[100];
    // fill 100 MyStruct's with copy of abc
    std::fill_n(arr, 100, abc); // working C++ way

    // or maybe loop of memcpy? But is it efficient?
    for (int i = 0; i < 100; i++)
        memcpy(arr[i],abc,sizeof(MyStruct));
}
Run Code Online (Sandbox Code Playgroud)

c c++ memory struct memcpy

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

为什么我的班级没有链接?

本周我开始将我的知识从C升级到C++,我想重载一些运算符

我有一个名为Matrix的课程

#include "lcomatrix.h"

inline Matrix::Matrix(unsigned rows, unsigned cols) :
        rows_(rows), cols_(cols)
{
        data_ = new double[rows * cols];
}

inline Matrix::~Matrix() {
    delete[] data_;
}

inline double& Matrix::operator()(unsigned row, unsigned col) {
    return data_[cols_ * row + col];
}

inline double Matrix::operator()(unsigned row, unsigned col) const {
    return data_[cols_ * row + col];
}
Run Code Online (Sandbox Code Playgroud)

内容lcomatrix.h

#include <iostream>

class Matrix {
public:
    Matrix(unsigned rows, unsigned cols);
    double& operator()(unsigned row, unsigned col);
    double operator()(unsigned row, unsigned col) const;

    ~Matrix(); …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors g++

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

指向数组的指针获得大小为C++的指针

int * a;
a = new int[10];
cout << sizeof(a)/sizeof(int);
Run Code Online (Sandbox Code Playgroud)

如果我使用普通数组答案是10,唉,打印的幸运数字是1,因为sizeof(int)是4而iszeof(*int)也是4.我怎么能这个?在我看来,保持内存大小是一个复杂的选择.如何使用代码获得大小?

我最好的猜测是迭代一个数组并搜索它的结束,结束是0,对吗?有什么建议?

- 编辑

好吧,我对矢量的担心是它会在推回时重新分配,你得到了重点,我可以分配内存.但是,我无法改变结构,整个代码是相关的.谢谢你的答案,我看到没有办法,所以生病只是寻找一种方法来存储大小的内存.

我问的问题不是什么样的结构.

c++ arrays int pointers

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

C++,实例化std :: vector时性能不佳

我有一个关于std :: vector实例化的问题.我比较了std :: vector的实例化和相同大小的数组的动态分配.我期待std :: vector的实例化会花费更长的时间但我的性能差异很大.

对于数组我有53 us对于std :: vector我有4338 us

我的代码:

#include <chrono>
#include <vector>
#include <iostream>

int main() {
    unsigned int NbItem = 1000000 ;
    std::chrono::time_point<std::chrono::system_clock> start, middle ,end;
    start = std::chrono::system_clock::now() ;
    float * aMallocArea = (float *)calloc(sizeof(float)*NbItem,0) ;
    middle = std::chrono::system_clock::now() ;
    std::vector<float> aNewArea ;
    middle = std::chrono::system_clock::now() ;
    aNewArea.resize(NbItem) ;
    //float * aMallocArea2 = new float[NbItem];
    end = std::chrono::system_clock::now() ;
    std::chrono::duration<double> elapsed_middle = middle-start;
    std::chrono::duration<double> elapsed_end = end-middle;
    std::cout << "ElapsedTime CPU  = " …
Run Code Online (Sandbox Code Playgroud)

c++ arrays performance stl vector

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