превращение элементов указателя * в одномерный массив - PullRequest
2 голосов
/ 18 октября 2019

Ниже c ++ code - это пример того, как мы можем напечатать элемент из вектора.

 #include<iostream> 
#include<iterator> // for iterators 
#include<vector> // for vectors 
using namespace std; 
int main() 
{ 
    vector<int> ar = { 1, 2, 3, 4, 5 }; 

    // Declaring iterator to a vector 
    vector<int>::iterator ptr; 

    // Displaying vector elements using begin() and end() 
    cout << "The vector elements are : "; 
    for (ptr = ar.begin(); ptr < ar.end(); ptr++) 
        cout << *ptr << " "; 

    return 0;     
} 

Мой вопрос заключается в том, как мы можем преобразовать элемент из ptr * и сделать его одномерным массивом?

элементы массива будут зависеть от количества элементов, которые я получаю из * ptr.

например, мой выходной массив будет выглядеть так:

int array[i] ={ 1, 2, 3, 4, 5};

Ответы [ 3 ]

2 голосов
/ 18 октября 2019

Вы можете получить указатель на пространство данных вектора, используя std::vector::data()

int *array = ar.data(); // Notice the pointer notation and please avoid name 'array'

for( int i =0; i < ar.size(); i++) {
   std::cout << array[i] <<'\n';
}
1 голос
/ 18 октября 2019

ptr является итератором для векторных элементов. Он просто дает адрес, где элемент хранится в памяти. Вы можете прочитать значение, хранящееся в памяти, разыменовав его, т.е. *ptr.

enter image description here

Если вы хотите создать массив из вашего вектора, вынужно знать размер массива во время компиляции, но вы можете использовать динамически выделенную память, вместо этого вот пример:

int* arr = new int [vec.size()];
for(int i = 0; i < vec.size(); ++i)
{
    arr[i] = vec[i];
}

delete [] arr;
0 голосов
/ 18 октября 2019

Вы можете использовать функцию data () вектора, чтобы получить внутренние данные вектора, но это не рекомендуется.

Например, int * ptr = ar.data ();

Ниже ссылка для оператора [] https://www.geeksforgeeks.org/vector-data-function-in-c-stl/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...