Чтобы добавить к тому, что сказал @lawlist (который должен был связывать ключ в minibuffer-local-map
):
Есть несколько мини-буферов мини-буферов, в зависимости от того, что читается в минибуфере, и как. И какой из этих раскладок, которые вы, возможно, захотите использовать, может зависеть от того, какую версию Emacs вы используете.
Кроме того, есть также карта клавиш для взаимодействия с буфером *Completions*
: completion-list-mode-map
.
Для завершения работы в минибуфере основной раскладкой является minibuffer-local-completion-map
.
Вот список мини-буферов. Некоторые из них могут быть недоступны (использованы) в вашей версии Emacs.
minibuffer-local-map
minibuffer-local-ns-map
minibuffer-local-isearch-map
minibuffer-local-completion-map
minibuffer-local-must-match-map
minibuffer-local-filename-completion-map
minibuffer-local-filename-must-match-map
minibuffer-local-must-match-filename-map
Кроме того, вы можете использовать minibuffer-with-setup-hook
(или minibuffer-setup-hook
напрямую), чтобы добавить привязки клавиш «на лету», на протяжении одного показания минибуфера.
I добавит эту информацию, так как это может быть очень полезно при манипулировании мини-буферами: вы можете использовать C-h M-k
(команда describe-keymap
), из библиотеки help-fns+.el
, чтобы увидеть все привязки данной мини-буферической клавиатуры в удобочитаемой форме.
Хотя ваш вопрос не очень ясен, я предполагаю, что вы имеете в виду двумерный вектор, чтобы означать вектор векторов:
vector< vector<int> > vvi;
Тогда вам нужно использовать два итератора для его обхода, первый - итератор «строк», второй - итераторы «столбцов» в этой «строке»:
//assuming you have a "2D" vector vvi (vector of vector of int's)
vector< vector<int> >::iterator row;
vector<int>::iterator col;
for (row = vvi.begin(); row != vvi.end(); row++) {
for (col = row->begin(); col != row->end(); col++) {
// do stuff ...
}
}
Можно использовать автоматическое ключевое слово для таких случаев:
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main() {
// your code goes here
vector<vector<int>>v;
for(int i=0;i<5;i++)
{
vector<int> x={1,2,3,4,5};
v.push_back(x);
}
cout<<"-------------------------------------------"<<endl;
cout<<"Print without iterator"<<endl;
cout<<"-------------------------------------------"<<endl;
for(int i=0;i<5;i++)
{
vector<int> y=v[i];
for(int j=0;j<y.size();j++)
{
cout<<y[j]<<" ";
}
cout<<endl;
}
cout<<"-------------------------------------------"<<endl;
cout<<"Print with iterator"<<endl;
cout<<"-------------------------------------------"<<endl;
for(auto iterator=v.begin();iterator!=v.end();iterator++)
{
vector<int> y=*iterator;
for(auto itr=y.begin();itr!=y.end();itr++)
{
cout<<*itr<<" ";
}
cout<<endl;
}
return 0;
}
Если вы имеете в виду итератор STL и настраиваемый контейнер, который реализует общий 2D-массив объектов, это невозможно. Итераторы STL поддерживают только операции увеличения и уменьшения (например, «следующий» и «предыдущий»), где для перемещения по 2D-набору требуется четыре таких примитива (например, влево / вправо / вверх / вниз и т. Д.). Метафоры не совпадают.
Что вы пытаетесь сделать?
Предполагая, что вы имеете в виду вектор векторов, и у вас есть std :: vector
, встроенного способа сделать это нет, поскольку итераторы поддерживают только операции увеличения и уменьшения для перемещения вперед и назад.
2D-вектор - это матрица , поэтому вам понадобятся два типа итераторов: итератор строки и итератор столбца. Итераторы строк будут перемещать матрицу «вверх» и «вниз», а итераторы столбцов будут перемещаться «влево» и «вправо».
Вы должны реализовать эти классы итераторов самостоятельно, что не обязательно является тривиальной задачей. Если, конечно, вы просто не хотите перебирать каждый слот в матрице, и в этом случае двойной цикл for с использованием индексных переменных i
и j
будет работать нормально. В зависимости от ваших потребностей (вашему сообщению здесь немного не хватает содержания), вы можете использовать boost :: numeric :: ublas :: matrix
, который является матричным классом из библиотеки линейной алгебры Boost. Этот матричный класс имеет встроенные итераторы строк и столбцов, которые обычно упрощают итерацию по матрице.
i
и j
будет работать нормально. В зависимости от ваших потребностей (вашему сообщению здесь немного не хватает содержания), вы можете использовать boost :: numeric :: ublas :: matrix
, который является матричным классом из библиотеки линейной алгебры Boost. Этот матричный класс имеет встроенные итераторы строк и столбцов, которые обычно упрощают итерацию по матрице. в этом случае цикл double for с использованием индексных переменных i
и j
будет работать нормально. В зависимости от ваших потребностей (вашему сообщению здесь немного не хватает содержания), вы можете использовать boost :: numeric :: ublas :: matrix
, который является матричным классом из библиотеки линейной алгебры Boost. Этот матричный класс имеет встроенные итераторы строк и столбцов, которые обычно упрощают итерацию по матрице.