2017-03-10 6 views
-3

Meine Frage ist in Kommentar in der unteren Code.Wie Iterieren durch Vektor übergeben als Zeiger

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

Sie müssen den Zeiger dereferenzieren. –

+1

Anstatt als Zeiger zu übergeben, übergeben Sie ihn als Referenz. Verwenden Sie auch bereichsbasierte for-Schleifen, wenn Sie C++ 11 haben. – RPGillespie

+0

versuche 'myVec-> bei (i)'. –

Antwort

2

Sie können entweder

den Pass Argument von const Referenz:

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

Verwendung Iteratoren:

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

Verwenden at (Performance Kosten für gebundene Prüfung):

vec->at(i); 

Invoke operator[] direkt:

vec->operator[](i); 
0

Pass von Referenz:

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

Auch ist es besser Bereich für Schleifen basierend zu verwenden (C++ 11):

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

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

Wenn ich verstehe, ich glaube, Sie sind versuchen, es wie eine Reihe von Ints zu übergeben, könnte so etwas arbeiten

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

Sie Ihre Zeiger auf eine Referenz umwandeln kann und gehen von dort aus:

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