Правильный способ доступа к последнему элементу вектора члена класса - PullRequest
0 голосов
/ 23 декабря 2019

Я достиг последнего элемента вектора класса из функции main (). Но я не уверен, что это был правильный способ сделать это. Вот кодовая часть:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class myClass
{
public:
    std::vector <wstring> Vec;
    std::vector <wstring> Vec2;
    std::vector <wstring> Vec3;
    // ...
    std::vector <wstring> Vec35;
    myClass();
};
myClass::myClass() : Vec{ L"Init" }, Vec2{ L"Init" }, Vec3{ L"Init" }, Vec35{ L"Init" } {}


void func(std::vector<wstring>& v)
{
    v.push_back(L"The Last Element");
}

int main()
{
    myClass mC;

    func(mC.Vec);

    wstring last = *(((std::vector <wstring>&) mC.Vec).rbegin());   // Is it the correct way to do this?

    std::wcout << L"Last element reached from inside of main() function is : " << last << std::endl;
    return 0;
}

Вывод:

Last element reached from inside of main() function is : The Last Element

Ответы [ 2 ]

4 голосов
/ 23 декабря 2019

Использование rbegin действительно один из способов. Однако актерский состав не нужен.

Но более прямым способом является использование back. В отличие от rbegin, который дает вам итератор, который должен быть разыменован, back дает вам ссылку на последний элемент.

wstring last = mC.Vec.back();

В любом случае вы должны сначала проверить, что вектор не empty.

0 голосов
/ 23 декабря 2019

Да. Хотя это описательный способ сказать, что

Просто

wstring last = *mC.Vec.rbegin(); 

должно быть достаточно. Не требуется явное приведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...