Попробуйте это
db.collection.update(
{ _id : ObjectId("57315ba4846dd82425ca2408")},
{ $pull: {"myarray.userId": ObjectId("570ca5e48dbe673802c2d035")}}
)
db.collection.update(
{ _id : ObjectId("57315ba4846dd82425ca2408")},
{ $push: {"myarray": {
userId:ObjectId("570ca5e48dbe673802c2d035"),
point: 10
}}
)
Это может зависеть, особенно от того, будет ли ваш файл иметь одинаковое количество элементов в каждой строке или нет. Если это так, то вам, вероятно, нужен 2D-матричный класс, обычно что-то вроде этого:
class array2D {
std::vector<double> data;
size_t columns;
public:
array2D(size_t x, size_t y) : columns(x), data(x*y) {}
double &operator(size_t x, size_t y) {
return data[y*columns+x];
}
};
Обратите внимание, что, как написано, предполагается, что вы знаете размер, который вам нужен , Этого можно избежать, но код становится немного больше и сложнее.
В любом случае, чтобы читать номера и поддерживать исходную структуру, вы обычно читаете строку за раз в строку , затем используйте строковый поток для чтения чисел из строки. Это позволяет хранить данные из каждой строки в отдельной строке в вашем массиве.
Если вы не знаете размер раньше времени или (особенно), если разные строки могут не все содержать одинаковое количество numbers:
11 12 13
23 34 56 78
Вместо этого вы можете использовать std::vector<std::vector<double> >
. Это накладывает некоторые накладные расходы, но если разные строки могут иметь разные размеры, это простой способ выполнить задание.
std::vector<std::vector<double> > numbers;
std::string temp;
while (std::getline(infile, temp)) {
std::istringstream buffer(temp);
std::vector<double> line((std::istream_iterator<double>(buffer)),
std::istream_iterator<double>());
numbers.push_back(line);
}
... или с помощью современного (C ++ 11) компилятора, вы можете использовать скобки для инициализации line
:
std::vector<double> line{std::istream_iterator<double>(buffer),
std::istream_iterator<double>()};
вы можете читать и писать отдельно, как и другие. Но если вы хотите записать в одно и то же, вы можете попробовать:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
double data[size of your data];
std::ifstream input("file.txt");
for (int i = 0; i < size of your data; i++) {
input >> data[i];
std::cout<< data[i]<<std::endl;
}
}
Оператор ввода для числа пропускает ведущие пробелы, поэтому вы можете просто прочитать число в цикле:
while (myfile >> a)
{
// ...
}