2015-06-17 2 views
0

Позвольте мне указать, что я имею в виду. Скажем, у меня есть следующий код:Как навсегда удалить элемент вектора?

#include <iostream> 
#include <vector> 
using namespace std; 

int main() { 

    vector <int> ints; 
    ints.push_back(1); 
    ints.push_back(2); 
    ints.push_back(3); 

    for(int i=0;i<ints.size();i++) { 
    cout << ints[i] << endl; 
    } 
    cout << endl; 

    ints.erase(ints.begin()); 

    for(int i=0;i<ints.size();i++) { 
    cout << ints[i] << endl; 
    } 

    return 0; 
} 

Что я могу сделать, чтобы сделать версию этой программы, которая начнется с 1 уже удалены после того, как в первый раз это запустить? По существу делая 2 начало вектора во второй раз, когда он запускается, а затем 3, прежде чем в основном удалять каждый элемент вектора после запуска его определенное количество раз. Я начинающий программист, так жаль, если это объяснение не было ясным.

+0

В общем, программа работает в энергозависимой памяти, то есть когда процесс завершается, все данные теряются. Понятия, которые вы говорите, должны быть в энергонезависимой памяти, поэтому вам нужно сохранить ее в каком-то вторичном хранилище, например. жесткий диск. – mr5

+0

@ mr5: Напишите как _answer_ пожалуйста !! –

ответ

0

У вас есть несколько вариантов:

  • переписать код, как вы запустите его. Это безумие. Изменение двоичного файла скомпилированной программы просто непросто.

  • Сохраните вектор во внешнем файле. Вы можете сделать это с помощью некоторого базового анализа с использованием std::cin и некоторых разделителей; попробуйте этот пример здесь: http://coliru.stacked-crooked.com/a/9a4d7a1a3f525b7e

Я не могу думать о чем больше. Но переписывание самой программы каждый раз, когда она запускается, обычно не разрешается на C++ - такая вещь больше похожа на поведение, возможно, вирусов или компиляторов Just-In-Time, которые должны принимать вольности с защитой системы, и, вероятно, не стоит просто изменять значение стартового номера std::vector<int> каждый раз, когда программа запускается.

2

Используйте файл. Вы можете загрузить содержимое вектора из файла, распечатать его, стереть первый элемент и затем записать содержимое вектора обратно в файл. Если открытие файла для чтения не удается, вы можете предположить, что это первый раз, когда программа была запущена, и заполните вектор с начальными значениями.

#include <fstream> 
#include <iostream> 
#include <vector> 

std::vector<int> load(char const* filename) 
{ 

    // try to open the file for reading 
    std::ifstream fin(filename); 

    // couldn't open the file, so generate initial content 
    if (!fin) { 
     return { 1, 2, 3 }; 
    } 

    // read the contents of the file into a vector, then return it 
    int x; 
    std::vector<int> v; 
    while (fin >> x) 
     v.push_back(x); 
    return v; 
} 

void save(char const* filename, std::vector<int> const& v) 
{ 
    std::ofstream fout(filename); 
    // put a '\n' between each number so that distinct numbers aren't 
    // concatenated together. e.g. Three seperate numbers 1, 2 and 3 
    // aren't combined to become a single number, 123 
    for (auto x : v) 
     fout << x << '\n'; 
} 

int main(int argc, char* argv[]) 
{ 
    char const* filename = "something"; 
    auto v = load(filename); 
    for (auto x : v) 
     std::cout << x << '\n'; 
    if (!v.empty()) 
     v.erase(v.begin()); 
    save(filename, v); 
} 
Смежные вопросы