我如何转换一个std::vector<双>到双数组[]?
当前回答
你可以做一些这样的事情
vector <int> id;
vector <double> v;
if(id.size() > 0)
{
for(int i = 0; i < id.size(); i++)
{
for(int j = 0; j < id.size(); j++)
{
double x = v[i][j];
cout << x << endl;
}
}
}
其他回答
std::vector<double> vec;
double* arr = vec.data();
向量实际上是皮肤下的数组。如果你有一个函数:
void f( double a[]);
你可以这样调用它:
vector <double> v;
v.push_back( 1.23 )
f( &v[0] );
你不应该需要将一个向量转换成一个实际的数组实例。
对于c++ 11, vector.data()就可以了。
对什么?您需要澄清:您需要指向数组或数组的第一个元素的指针吗?
如果你正在调用一个期望前者的API函数,你可以执行do_something(&v[0], v.size()),其中v是一个双精度向量。向量的元素是连续的。
否则,你只需要复制每个元素:
double arr[100];
std::copy(v.begin(), v.end(), arr);
确保不仅arr足够大,而且arr被填满,或者你有未初始化的值。
对于std::vector<int> vec, vec获取int*,可以使用两种方法:
Int * arr = &vec[0]; Int * arr = vvector .data();
如果你想将任何类型的T向量转换为T*数组,只需将上面的int替换为T。
为了更好地理解,我将向你展示为什么上面两个是有效的?
vector本质上是一个动态数组。
主要数据成员如下:
template <class T, class Alloc = allocator<T>>
class vector{
public:
typedef T value_type;
typedef T* iterator;
typedef T* pointer;
//.......
private:
pointer start_;
pointer finish_;
pointer end_of_storage_;
public:
vector():start_(0), finish_(0), end_of_storage_(0){}
//......
}
range (start_, end_of_storage_)是vector所分配的所有数组内存;
range(start_, finish_)是vector使用的所有数组内存;
范围(finish_, end_of_storage_)是备份阵列内存。
比如向量vec。其中有{9,9,1,2,3,4}是指针,可以像下面这样。
因此,&vec[0] = start_ (address.) (start_等价于int*数组头)
在c++11中,data()成员函数只返回start_
pointer data()
{
return start_; //(equivalent to `value_type*`, array head)
}
推荐文章
- equals vs Arrays。Java中的等号
- 如何计算一个NumPy bool数组中的真实元素的数量
- 如何找到一个值的数组索引?
- Python csv字符串到数组
- 面试问题:检查一个字符串是否是另一个字符串的旋转
- 如何使用枚举作为标志在c++ ?
- 在c++程序中以编程方式检测字节序
- 为什么我的程序不能在Windows 7下用法语编译?
- 如何获取变量的类型?
- 什么是奇怪的重复模板模式(CRTP)?
- 连接两个向量的最佳方法是什么?
- 在c++中,是通过值传递更好,还是通过引用到const传递更好?
- 在STL中deque到底是什么?
- 使用Java在原语数组中查找最大/最小值
- Windows上最好的免费c++分析器是什么?