如何迭代通过指针传递的向量

时间:2017-03-10 17:49:41

标签: c++ pointers

我的问题是在下面的代码中发表评论。

@android:id/list

4 个答案:

答案 0 :(得分:4)

你可以

通过const参考:

传递参数
void printVec(const std::vector<int>& vec) {
  for (const auto& value : vec)
    ..
}

使用迭代器:

void printVec(td::vector<int>* vec) {
  for (auto it = vec->begin(); it != vec->end(); ++it)
    ..
}

使用at(绑定支票的性能成本):

vec->at(i);

直接调用operator[]

vec->operator[](i);

答案 1 :(得分:0)

通过引用传递:

void printVec(std::vector<int> & myVec) {

 // How to do such looping not to dereference pointer
 for (int i = 0; i < myVec.size(); i++) {
   std::cout << myVec[i] << " ";
 }
}

使用基于范围的循环(C ++ 11)也是更好的选择:

void printVec(std::vector<int> & myVec) {

 // How to do such looping not to dereference pointer
 for (auto i : myVec) {
   std::cout << i << " ";
 }
}

答案 2 :(得分:0)

您可以将指针转换为引用并从那里继续:

void printVec(std::vector<int> *myVec) {
    std::vector<int>& vec = *myVec;
    // How to do such looping not to dereference pointer
    for (size_t i = 0; i < vec->size(); i++) {
      std::cout << vec[i] << " ";
    }
}

答案 3 :(得分:-1)

如果我理解我认为你试图将它传递给一系列整数,那么这样的东西可能会起作用

#include <iostream>
#include <vector>

void printVec(int* i, int n)
{
    for(int j = 0; j < n; j++)
    {
        std::cout << i[j] << std::endl;
    }
}

int main()
{
    std::vector<int> a;
    a.push_back(5);
    a.push_back(4);
    a.push_back(3);
    a.push_back(2);
    a.push_back(1);
    a.push_back(0);
    printVec(&a[0], a.size());
    return 0;
}