У меня был вопрос о том, как получить доступ к элементам в list<vector<int>>
. Я могу получить доступ к элементам, назначив значения итератора временному вектору. Например,
list<vector<int>> a = {{3,10,1},{5,10,0}};
auto it=a.begin();
vector<int> temp=*it; // This is acceptable
int t1 = *it[0]; // This is not acceptable
Но я хочу получить доступ к элементам вторым способом, т. е. без присвоения значений какому-либо временному пространству. Является ли это возможным?
Что вообще означает этот вопрос?
This is not acceptable
это сообщение компилятора? Выбросьте компилятор. Если нет, узнайте Как задать хороший вопрос?@user17732522 user17732522 спасибо за ответ, это решило мою проблему.
@3CxEZiVlQ Я посмотрю.
Ваша «приемлемая» строка создает копию. Итак, это:
{
auto it=a.begin();
std::vector<int> temp=*it;
temp.push_back(0);
}
не будет иметь никакого эффекта. Вместо этого вы можете хранить константную или неконстантную ссылку:
{
auto it=a.begin();
auto const& immutable = *it;
return immutable.size();
}
или
{
auto it=a.begin();
auto& ref = *it;
ref.push_back(0);
return ref[0];
}
Конечно, вам не обязательно вообще хранить ссылку.
auto it = a.begin();
(*it).push_back(0);
// or
it->push_back(1);
return (*it)[0];
Спасибо, мне нужны были скобки () перед доступом к элементам, спасибо за ответ.
[]
имеет более высокий приоритет, чем*
, но вы хотите сначала применить*
кit
, а затем[]
к его результату. Итак:(*it)[0]
.