【问题标题】:turning a *pointer elements to an 1D array将 *pointer 元素转换为一维数组
【发布时间】:2019-10-18 05:35:55
【问题描述】:

下面的 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};

【问题讨论】:

  • 什么是it*?作为新用户,请从tour 开始阅读How to Ask
  • 一般迭代循环写成for (ptr = ar.begin(); ptr != ar.end(); ptr++)。我不明白为什么'&lt;' 也不起作用,但您没有看到参考引用使用它。
  • 您是想从ar 创建一个一维数组,还是只想从现有的int array[i] ={ 1, 2, 3, 4, 5 } 中得到精确的输出? (记得 C++ 中没有 VLA,除非通过非标准扩展)

标签: c++ pointers vector


【解决方案1】:

您可以使用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';
}

【讨论】:

    【解决方案2】:

    ptr 是向量元素的iterator。它只是给出了元素在内存中存储的地址。您可以通过取消引用来读取存储在内存中的值,即*ptr

    如果你想从你的向量中创建数组,你需要在编译时知道数组的大小,但是你可以使用动态分配的内存来代替这里是一个例子:

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

    【讨论】:

      【解决方案3】:

      你可以使用vector的data()函数来获取vector的内部数据,但不推荐这种方式。

      例如 int* ptr = ar.data();

      请参阅以下链接以获取 [] 运算符 https://www.geeksforgeeks.org/vector-data-function-in-c-stl/

      【讨论】:

        猜你喜欢
        • 2012-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2019-06-29
        相关资源
        最近更新 更多