简单的问题,如何创建一个带有a unsigned char std::vector和吐出的函数.谢谢!unsigned char[]length
啊,好吧看来我的问题是我对std :: vector的了解.我一直认为std :: vector没有以线性方式保持其值.这解决了我的很多问题.谢谢!
我有一个矢量如下.
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++的新手.
非常感谢.
我最近遇到过这样的事情:
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?(也许这是一个操作员超载的东西?我对这些东西还不是那么自信..)
我正在使用ZeroMQ库void *来表示任意二进制数据块.但是我想std::vector用来复制和移动这些块.std::vector表示原始字节的首选,惯用方法是什么?我目前正在使用,std::vector<unsigned char>但我想确保我的代码对其他人有意义.
我在某种程度上意识到通过引用返回这让我感到困惑.
我有一个返回类的公共领域的引用的功能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) 我有一个需要uint8_t*作为输入的函数(unsigned char).但是,我将我的字符串保存为vector<unsigned char>.如何将其转换uint8_t*为我的功能才能接受?
谢谢.
如果我得到一个vector :: end迭代器,然后将一个新元素推回到同一个向量,那么结尾的迭代器会成为最后一个元素的迭代器吗?
如果这不起作用,是否有一种简单的方法可以将迭代器用于C++中向量的最后一个元素?
为什么公共构造函数(和析构函数)不足以将类型的对象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调用默认构造函数.
我有很多大型的结构数组,并且数组的大小很少会在最大大小上发生变化,当它出现时,它是可以接受的.
我想我应该有一个大的分配块,我可以继续编写并重写以下结构:
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)
还有这个在调试器中显示为一个数组?
我在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)