将指针传递给期望为向量的函数
Passing a pointer to a function expecting a vector
有一个函数,我不能编辑它,它有以下声明:
void foo(std::vector<uchar>& vector_to_filled_with_data);
我想调用这个函数,但我想让它填充一个指针:
void method_that_would_called_from_another_place(){
uchar* to_be_filled =/*new uchar[n]*/;
foo(to_be_filled);
}
注:注释部分是可选的…我可以擦掉它,也可以留下它。我知道这完全是不好的行为。但是,它是本机管理的包装器,所以我必须处理原始指针。
编辑:我希望数据活在作用域之外,所以得到'vec。"数据"不是一个选项。我希望它是线程安全的
您需要创建一个矢量,创建一个数组,然后从矢量复制数据:
std::vector<uchar> to_be_filled;
foo(to_be_filled);
uchar* ptr = new uchar[to_be_filled.size()];
std::copy(to_be_filled.begin(), to_be_filled.end(), ptr);
如果由于某种原因数组不可触碰,函数不可触碰,则必须复制数据
表示从数组构造向量。返回后,需要将返回的数据复制回数组。
std::vector
拥有指向内部数据的指针。您可以交换分配器以避免它随后释放数据,但这会改变std::vector<char>
的类型。
如果你想传递一个指针(没有它的大小),函数改变数组是不安全的。
所以我宁愿尝试摆脱拥有的数组或尝试让函数接受其他参数。
代码#include <vector>
void foo(std::vector<char> &data) {
data.push_back("a"); // attention overflow behaviour
}
int main (int argc, char **argv) {
using namespace std;
char arr[5] = { 'h', 'e', 'l', 'l', 'o' };
vector<char> cp(&arr[0], &arr[5]);
foo(cp);
// somehow handle buffer overflows
copy(&foo.data[0], &foo.data()[5], arr);
}
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用向量的template_back函数
- 如何删除除 ArduinoSTL 的向量函数之外的所有函数
- 在使用标准向量函数时引发'std::bad_alloc'实例后调用的终止
- 我可以为向量函数返回 NULL<double> 吗?
- 将多个向量(函数结果)组合到一个使用模板中
- 如何在 c++ 中制作通用字符串到向量函数
- 为什么简单的C++向量函数会产生越界的下标
- 为什么我的向量函数的返回值总是 1
- 模板化向量函数参数的std::is_base_of
- 我的程序没有运行,多维向量函数
- C 如何使2D向量函数
- 如何从 v8 返回向量<T> C++ 函数
- C++ 如何使此向量函数接受任何分隔符
- 我想返回一个向量函数,<Competition>但被告知竞争是未声明的,并且我正在使用未定义的类'std::vector'
- C++:如何在类中使用向量函数
- 自己的"Insert"方法(向量)函数模板
- c++中的内存泄漏:循环中的向量函数
- 如何添加一个元素到一个向量函数
- 向量函数'at'