如何通过向量迭代作为指针

How to iterate through vector passed as pointer

本文关键字:指针 迭代 何通过 向量      更新时间:2023-10-16

我的问题在下面的代码中注释。

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] << " ";
 }
}

您可以

通过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);

通过参考:

通过
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 << " ";
 }
}

您可以将指针转换为参考,然后从那里继续:

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] << " ";
    }
}

如果我明白,我认为您正在尝试像一系列INT一样传递它,类似这样的事情可能会起作用

#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;
}