标签: stdvector

unsigned char std :: vector to unsigned char []?

简单的问题,如何创建一个带有a unsigned char std::vector和吐出的函数.谢谢!unsigned char[]length

啊,好吧看来我的问题是我对std :: vector的了解.我一直认为std :: vector没有以线性方式保持其值.这解决了我的很多问题.谢谢!

c++ arrays stdvector

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

释放std :: vector C++的内存

我有一个矢量如下.

std::vector<std::string> exportNameList;
Run Code Online (Sandbox Code Playgroud)

我通过使用push_back方法向此添加元素.但我得到一个调试断言为"

"Windows已在AxCent.exe中触发了断点.这可能是由于堆损坏,这表明AxCent.exe或其加载的任何DLL中存在错误.

当它调用类的析构函数时会发生这种情况.当我引用调用堆栈时,我被引导到vector类中的以下代码块.

~vector()
{   // destroy the object
    _Tidy();
}
Run Code Online (Sandbox Code Playgroud)

我注意到删除向量时出错.我对么?我该如何解决?我已经提到了很多例子,但是还没有设法解决这个问题.我是C++的新手.

非常感谢.

c++ mfc stdvector

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

当预期数组时,将指针传递给向量中的第一个元素是否安全?

可能重复:
我可以使用std :: vector调用带数组/指针参数的函数吗?

我最近遇到过这样的事情:

class X {
    public: void foo(float* p, int elements);
};
Run Code Online (Sandbox Code Playgroud)

=一个期望浮点值数组的方法.

但在示例代码中,这是他们使用它的方式:

std::vector<float> bar;
bar.push_back(42);
// ...

X x;
x.foo( &bar[0], (int)bar.size() );
Run Code Online (Sandbox Code Playgroud)

现在我想知道这是一种安全的方法还是恰好适用于大多数实现std::vector?(也许这是一个操作员超载的东西?我对这些东西还不是那么自信..)

c++ arrays stdvector

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

在std :: vector中表示原始字节的最佳方法?

我正在使用ZeroMQ库void *来表示任意二进制数据块.但是我想std::vector用来复制和移动这些块.std::vector表示原始字节的首选,惯用方法是什么?我目前正在使用,std::vector<unsigned char>但我想确保我的代码对其他人有意义.

c++ sockets buffer stl stdvector

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

返回参考后,数据将被删除

我在某种程度上意识到通过引用返回这让我感到困惑.

我有一个返回类的公共领域的引用的功能BoardNode,std::vector<BoardNode> _neighboursVector.

我也有一个类Board,其保持std::vector<BoardNode>.

我的成员函数是这样的:

const std::vector<BoardNode>& 
Board::getNeighboursVector(unsigned int x, unsigned int y) const
{
    BoardNode node = this->getBoardNode(x, y);
    //...
    node._neighboursVector.push_back(...);
    //...
    return node._neighboursVector;
}
Run Code Online (Sandbox Code Playgroud)

在返回行上调试时,我在向量中得到正确的值但在此函数之外我得到空向量.为什么?

std::vector<BoardNode> v = b.getNeighboursVector(5,5);
Run Code Online (Sandbox Code Playgroud)

编辑

getBoardNode 定义

const BoardNode & Board::getBoardNode(unsigned int rowIdx, unsigned int colIdx) const
{
//...
}

BoardNode & Board::getBoardNode(unsigned int rowIdx, unsigned int colIdx)
{
//...
}
Run Code Online (Sandbox Code Playgroud)

c++ reference vector stdvector

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

将vector <unsigned char>转换为uint8_t*

我有一个需要uint8_t*作为输入的函数(unsigned char).但是,我将我的字符串保存为vector<unsigned char>.如何将其转换uint8_t*为我的功能才能接受?

谢谢.

c++ casting stdvector

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

C++中的矢量迭代器

如果我得到一个vector :: end迭代器,然后将一个新元素推回到同一个向量,那么结尾的迭代器会成为最后一个元素的迭代器吗?

如果这不起作用,是否有一种简单的方法可以将迭代器用于C++中向量的最后一个元素?

c++ iterator stl stdvector

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

为什么要在向量末端放置一个类型T需要移动可构造?

为什么公共构造函数(和析构函数)不足以将类型的对象T放在向量的后面?以下片段格式不正确.

#include <vector>

struct Foo {
  Foo() {}
  Foo(int) {}
  ~Foo() {}

  Foo(const Foo&) = delete;
  Foo& operator=(const Foo&) = delete;
};

int main() {
  std::vector<Foo> vfoo(10);

  vfoo.emplace_back();
}
Run Code Online (Sandbox Code Playgroud)

的emplace_back要求,Foo至少可以移动构造的,而这个代码无法编译,因为移动构造函数与拷贝构造函数一起被删除.但我想像emplace_back使用placement new调用默认构造函数.

c++ move stdvector move-semantics c++11

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

C++:大型动态数组结构很少改变大小,是否需要Vector?

我有很多大型的结构数组,并且数组的大小很少会在最大大小上发生变化,当它出现时,它是可以接受的.

我想我应该有一个大的分配块,我可以继续编写并重写以下结构:

struct S{
    unsigned int A;
    unsigned int B;
};
Run Code Online (Sandbox Code Playgroud)

在内存中,其中3个结构的数组应具有以下布局:

A,B,A,B,A,B.
Run Code Online (Sandbox Code Playgroud)

并不是:

*A,*B,*A,*B,*A,*B.
Run Code Online (Sandbox Code Playgroud)

也不应该是链表,因为我不需要知道一个条目何时结束而下一个条目何时开始.我的所有条目都是相同的大小,并且永远不会超过我在大块中分配的内容.还有大量的条目,因此每个元素的开销很小很重要.但是,每个数组/向量/列表的一些开销很好.

我已经看到了使用的建议std::vector,但从我收集的内容来看,每个元素都有一些开销,在这种情况下我不需要.

我应该在这里使用什么?如果动态数组合适,我可以:

S* arr = new S[x];
Run Code Online (Sandbox Code Playgroud)

还有这个在调试器中显示为一个数组?

c++ memory arrays struct stdvector

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

在C++ 17中std :: vector :: emplace_back的返回值的用例是什么?

我在cppreference.com上读过新的(自C++ 17以来)std::vector::emplace_back对插入元素的referance返回值.

返回值

  • (无)(直到C++ 17)
  • 对插入元素的引用.(自C++ 17起)

我在想,在将元素插入向量时,为什么我们需要对它进行反馈?这可能是多么有用或者这个新回归的用例是什么?

这是我编写的示例代码,该功能.

#include <vector>

int main()
{
    std::vector<int> myVec;
    for(int i = 0; i < 3; ++i)
    {
        int& newElement = myVec.emplace_back(i);
        ^^^^^^^ => why standard should expose the element after inserting.
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ stdvector emplace c++17

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

标签 统计

c++ ×10

stdvector ×10

arrays ×3

stl ×2

buffer ×1

c++11 ×1

c++17 ×1

casting ×1

emplace ×1

iterator ×1

memory ×1

mfc ×1

move ×1

move-semantics ×1

reference ×1

sockets ×1

struct ×1

vector ×1