Я не слишком знаком с r, мой алгоритм должен работать независимо от этого. Вы хотите сдвинуть строку до строки 2n-1. Я хотел бы создать второй массив и вручную разместить их в определенных индексах.
какой-то псевдокод для вас (я обычно пишу на python, так что мой псевдо-код показывает его)
reinsert(list):
array_out = [len(list)*2,len(list[0]) // initialize to the desired dimensions
array_out[0] = list[0] /// manually insert first row cause math
for n in range(0,len(list)):
array_out[2n-1] = list[n]
array_out[2n] = event_rinkside // make a function call or make an ifthen clause to do you logic
return(array_out)
вы можете вставить вновь созданные строки в цикл или добавить их после того, как факт, зная, что они все будут по четным индексам.
Добавьте несколько конструкторов и указатель на родительский класс.
#include <string>
#include <vector>
class myList
{
public:
std::vector<std::string> vec;
myList(): items(this) {} // Added
class Items
{
public:
Items(myList *ml): self(ml) {} // Added
void Add(std::string str)
{
self->vec.push_back(str); // Changed
};
myList *self; //Added
}items;
};
int main()
{
myList newList;
newList.items.Add("A");
}
Вам нужен myList () конструктор, таким образом, он регистрирует экземпляры себя с экземпляром внутренней членской переменной класса. Затем Вам нужен конструктор Объектов для хранения указателя на внешний myList экземпляр класса. Наконец в Добавить методе, необходимо сослаться на vec в сохраненном myList экземпляре.
Как Catskul указывает, конструктор Объекта ничего не должен на самом деле делать с myList указателем, который он получает. Я также хотел бы сказать, что, хотя этот ответ ближе к исходному намерению, ответ steveth45 ближе к тому, что Вы хотели бы сделать в реальной программе.
Внутренние классы только связаны по имени. Вы не можете обратиться к вектору в базовом классе как этот.
Или необходимо переместить вектор в к внутреннему классу или сохранить ссылку на него.
В отличие от Java, внутренние объекты в C++ не имеют доступа к внешнему 'этим' указателем..., если Вы думаете об этом могут быть случаи, где нет к ссылке.
Решение Richard Quirk является ближайшим, можно войти в C++
Таким образом, Вы не подвергаете своих участников класса непосредственно. Ваш пример кажется сверхспроектированным немного. Почему помещенный станд.:: вектор в класс и затем выставляет его как общественность?
class myList
{
private:
std::vector<std::string> vec;
public:
void Add(std::string str)
{
vec.push_back(str);
};
};
int main()
{
myList newList;
newList.Add("A");
}
Вы можете упростить это с помощью следующей конструкции:
typedef std::vector<std::string> myList;
Действительно, почему бы вам не использовать STL вектор напрямую? Таким образом, вы получите все стандартные алгоритмы, работающие с данные.