2015-01-20 15 views
6

पर वेक्टर पता असाइन करें मैं वेक्टर इटरेटर को वेक्टर तत्व को इंगित करना चाहता हूं। मेरे पासइटरेटर

#include <iostream> 
#include <vector> 

int main() { 
    std::vector<int> vec = {1,2,3,4,5}; 
    std::vector<int>::iterator it; 

    // want "it" to point to the "3" element, so something like 
    // it = &prices[2]; 
    // it = &prices.at(2); 

} 

लेकिन इनमें से कोई भी प्रयास काम नहीं करता है। मुझे लगता है मैं, कुछ वेक्टर समारोह है कि पुनरावर्तक रिटर्न की जरूरत है एक पते की बजाय लगता है

+2

'it = vec.begin() + 2;' – Borgleader

+1

या 'it = std :: अगला (vec.begin(), 2); या कैननिकल उत्तर - आरटीएफएम :-) – Praetorian

उत्तर

13

न की इन प्रयासों

दरअसल काम करते हैं, आप नहीं एक कंटेनर आईटीईआर बना सकते हैं एक सूचक से एक कंटेनर तत्व के लिए एटोर। आप उन्हें केवल कंटेनर से ही प्राप्त कर सकते हैं।

मैं मैं कुछ वेक्टर समारोह है कि पुनरावर्तक

हाँ, begin() पहला तत्व के लिए एक इटरेटर रिटर्न देता है की जरूरत है लगता है। जो भी तत्व आप चाहते हैं उसे संदर्भित करने के लिए वृद्धि। तीसरे के लिए,

it = vec.begin() + 2; 

या अधिक सामान्य रूप

it = std::next(std::begin(container), 2); 

जो काम करता है, भले ही कंटेनर यादृच्छिक अभिगम नहीं है।

+0

यह ध्यान देने योग्य है कि 'std :: अगला' केवल सी ++ 11 में उपलब्ध है, इससे पहले कि यह = container.begin(); std :: अग्रिम (यह, 2); 'वही काम करता है - अगर बस अधिक अजीब है। – Barry

6

पुनरावर्तक पाने के लिए मुख्य रास्ता से एक का उपयोग करने के लिए है (?):

: आपके मामले में

std::vector<int>::begin() 
std::vector<int>::end() 
std::vector<int>::rbegin() 
std::vector<int>::rend() 

std::vector<int> vec = {1,2,3,4,5}; 
std::vector<int>::iterator it = std::next(vec.begin(), 2); 
संबंधित मुद्दे