Я понял это! Вот обновленный фрагмент кода, который теперь содержит рабочие инструкции. Я оставлю этот пост на случай, если он кому-нибудь поможет.
.data
output1: .asciiz "The value in $t1 is: "
.text
add $t0, $t0, 2 # shifts the string left by 2 bits (CORRECT)
li $v0, 4
la $a0, output1
syscall # print "The value in $t1 is: "
li $v0, 4
move $a0, $t1
syscall # print the contents of the register $t1
Вы не можете хранить массивы в контейнерах STL. Вы бы использовали вектор векторов или что-то подобное для общего случая. В вашем конкретном случае я бы использовал вектор std :: pair, например: std :: vector
. std :: pair
- это класс, который имеет два члена, first
и second
, любого типа, которым вы его шаблонизируете.
Редактировать: I первоначально было как std :: vector
, но я не был уверен, был ли он перегружен для приема только 1 параметра в случае, когда оба типа одинаковы ... небольшое копание не нашло доказательств этого, поэтому я изменил его, чтобы явно указать, что оба первый
и второй
являются int
s.
Вещи, хранящиеся в контейнере стандартной библиотеки, должны быть назначаемыми и копируемыми - массивы не являются ни. Лучше всего создать список std :: vector. Кроме того, вы можете обернуть массив в структуру:
struct A {
int array[2];
};
std::list <A> alist;
Это хорошая ситуация для использования boost :: array вместо "классических" массивов в стиле C. Это должно работать:
std::list<boost::array<int,2> > my_list;
boost::array<int,2> foo={{1,2}};
my_list.push_back(foo);
Я бы предложил вам использовать std :: pair для хранения значений в этом случае. Он находится в
<утилита>
.
Вы можете хранить указатели на массивы в списке, но тогда вам придется иметь дело со всем управлением памятью. Использование пары намного проще, если вам нужны пары значений.