How do I, a ',' 더블 '을 변환하십시오 std::vector< double> 어레이입니다 []'?
std::vector<double> v;
double* a = &v[0];
무엇을위한 구체화합니다 합니다. 첫 번째 요소는 필요하신데요 포인터입니다 배열 또는 어레이에서는?
그렇지 않으면 그냥 각 요소를 복제하는 데 있다.
double arr[100];
std::copy(v.begin(), v.end(), arr);
도착 도착 보장 ',' 가 아니라 '는 타르 볼 만큼, 또는 비초기화 값을 가지고 있는 것이 아니라,' 가득 찼다.
장치당 [C++11] [1], ['베스.다타 ()'] (http://en.cppreference.com/w/cpp/container/vector/data) 이 트릭 할 것이다.
[1]: https://en.wikipedia.org/wiki/C% 2b% 2b11
vector<double> thevector;
//...
double *thearray = &thevector[0];
그러나 이 일을 기준으로 주의할 사항이 몇 가지 장점이 있다. 특히 '동시에' 에서 '는' 만 사용하게 잘있게나 시라이 테베스 내시경이요
'Std::vector< int>, 할 수 있다. int * ',', 'vec afaq vec 두 가지 방법을 사용할 수 있습니다.
int * = & 도착, vec [0];
int * 도착 = 베c다타 ();
, T ',' 모든 유형의 변환할지 스케쳐내 vector< T> 그냥 ',' 위 '를' T * 어레이입니다 재장착합니다 int '을 T'.
위 두 작품은 대해 잘 이해하고, 왜 산아래의 살펴보도록 하겠습니다.
기본 데이터 멤버를 아래와 같이.
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){}
//......
}
이 범위 (start_, end_ofstorage) '가' 모든 어레이입니다 벡터입니다 메모리 할당.
이 범위 (start, finish) '가' 어레이입니다 메모리 사용, 모든 벡터
이 '범위 (finish_, end_ofstorage)' 가 백업 어레이입니다 메모리.
예를 들어, 한 vector< int> 할 수 있다. vec. 1, 2, 3, 4}, {9 디스크입니다. diskid, 9 는 다음과 같은 포인터입니다 수 있습니다.
그래서 [0] ',' = start & vec (주소). (int * 어레이입니다 헤드에게 start 같습니다)
'그냥' 에서 '의 멤버 함수를 start_ 반품하십시오 c++11 데이터 ()'
pointer data()
{
return start_; //(equivalent to `value_type*`, array head)
}
데이터 () 메서드를 사용하여 이 작업을 할 수 있습니다. C++11 이 방법을 제공합니다.
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
vector<int>v = {7, 8, 9, 10, 11};
int *arr = v.data();
for(int i=0; i<v.size(); i++)
{
cout<<arr[i]<<" ";
}
return 0;
}
이 같은 일부 무엇을 할 수 있습니다.
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;
}
}
}