小编mk3*_*k33的帖子

使用已知数量的元素填充向量:在构造函数中指定其大小或使用reserve方法?

我想通过从流中读取单个元素来创建一些复杂类型的向量.我事先知道矢量大小.是否更好地指定向量构造函数中的元素数量或使用reserve方法?这两个中哪一个更好?

int myElementCount = stream.ReadInt();
vector<MyElement> myVector(myElementCount);
for (int i = 0; i < myElementCount; i++)
{
    myVector[i] = stream.ReadMyElement();
}
Run Code Online (Sandbox Code Playgroud)

要么

int myElementCount = stream.ReadInt();
vector<MyElement> myVector;
myVector.reserve(myElementCount);
for (int i = 0; i < myElementCount; i++)
{
    myVector.push_back(stream.ReadMyElement());
}
Run Code Online (Sandbox Code Playgroud)

那么我只是创建一个int或其他简单类型的向量的情况呢.

c++ vector std

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

在 C++ 中使用非成员方法

我将大部分类分为两个文件(.h 和 .cpp)。它们的所有方法(公共、私有或受保护)都在 .h 文件中声明并在 .cpp 文件中定义。

但是,有时我只需要一个仅由其中一个成员方法使用的快速辅助方法。在这些情况下,是否可以在 .cpp 文件中将此方法声明/定义为非成员函数,而不在 .h 文件中声明它?

这种方法可能有哪些缺点?我看到的是,该方法的定义必须出现在 .cpp 文件中的使用之前(如果我们不想使用前向声明)。此外,如果这些函数完全位于 .cpp 文件中,IDE 可能会很难找到这些函数。

我问这个问题的原因是,有时感觉就像我用这些不访问成员数据且不被任何其他类/文件使用的方法的声明污染了 .h 文件。看起来我通过引入这些辅助方法声明使 .h 文件中真正重要的声明更难查找/读取。

c++

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

将原始字节数组复制到空字节向量的最有效方法

我有一个场景,我需要将原始动态分配的uint8_t数组的内容复制到一个向量中(无论何时发生这种情况,都保证为).

vector<uint8_t> myVector;
const uint8_t* myRawArray;
Run Code Online (Sandbox Code Playgroud)

对我来说非常重要的是复制操作尽可能高效且可移植(可能会使用各种编译器版本).

我想用的一种方法是这样的:

myVector.reserve(byteCount);
myVector.insert(myVector.begin(), myRawArray, myRawArray + byteCount);
Run Code Online (Sandbox Code Playgroud)

关于速度如何与此相比的任何想法:

myVector.resize(byteCount);
memcpy(myVector.data(), myRawArray, byteCount);
Run Code Online (Sandbox Code Playgroud)

我想memcpy应该很快,但后来我被迫使用resize哪个需要将内存清零,所以我猜它会慢一点......

还有,还有其他建议吗?

c++ stl vector

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

避免矢量复制构造函数

我有一堆返回的方法vector<int>.它们不返回引用或指针,vector<int>因为返回的值不是类'state的一部分,它只是根据方法参数动态生成.

我想避免vector<int>在调用这样的方法时调用复制构造函数.

vector<int> result = myClass.GenerateVectorOfInt(/* params */); 

// Do something with the result;
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

这是否是一种可以接受的方式?或者还有其他更好或更优雅的解决方案.

vector<int> result = std::move(myClass.GenerateVectorOfInt(/* params */));
Run Code Online (Sandbox Code Playgroud)

c++ stl

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

标签 统计

c++ ×4

stl ×2

vector ×2

std ×1