2013-12-11 1 views
1

Предположим, у меня есть массив из 100 учеников. Предположим, что после определенного индекса, скажем 9, я хочу добавить к каждому ученику определенное значение, скажем 2, до начального значения, т. Е. предположим, изначально у меня естьИзменяйте значения при разных индексах массива за один раз

student_mark[0]=5 
student_mark[1]=6... 
.... 
.... 
student_mark[9]=2 
student_mark[10]=5 
.... 
.... 
student_mark[99]=8 

Затем после добавления 2 в соответствии с моими требованиями после индекса 9, я должен получить что-то вроде этого

student_mark[0]=5 
student_mark[1]=6... 
.... 
.... 
student_mark[9]=2 
student_mark[10]=7 
.... 
.... 
student_mark[99]=10 

есть ли способ сделать это в один присест без переборе из индекса От 10 до 100, добавляя 2 каждый раз индивидуально.

+0

Это своего рода прецедент для петель 'for'. Это около 3 строк легко читаемого кода и будет чрезвычайно быстрым, так как это C. Если есть более очевидный (или даже не столь очевидный) способ сделать это быстрее, компилятор, вероятно, оптимизирует код для этого метода, поэтому вы можете выбрать наиболее читаемый для исходного кода. – ajp15243

ответ

1

Нет хорошего способа. Что не так с циклом for, который вы описываете?

Если это действительно узкое место в вашей программе, я предполагаю, что вы вызываете этот код повторно. В этом случае существует вероятный лучший алгоритм для достижения вашей конечной цели (что нам неизвестно), но для выполнения конкретной задачи, описанной в исходном сообщении (добавление двух к каждому элементу массива), вы не найдете лучшего решения, кроме цикла C for.

+0

Я должен сделать это с гораздо большим массивом и многими значениями, что, в свою очередь, замедлит мою программу. –

+3

Почему вы думаете, что это будет медленно? Вы сравнили это? – abasterfield

+2

Если вы думаете об этом, просто не может быть способа сделать это быстрее. ЦП должен перейти в каждое место в памяти и изменить данные там независимо от того, что. Написанный на C и скомпилированный с любым современным компилятором, это будет работать почти так же быстро, как это возможно, с минимальными дополнительными усилиями. Многие компиляторы будут даже векторизовать его для вас. –

1

Не обойтись без использования heavy duty vector stuff. Если вам нужно спросить об этом, то это не для вас. Просто повторите его, это необычайно быстро в C на современном оборудовании.

-1
int i; 
for (i = 10; i < 100; i++){ 
    student_mark[i] +=2; 
} 
+0

_I есть способ сделать это за один раз, не итерируя от индекса 10 до 100, добавляя 2 каждый раз индивидуально ._ – BLUEPIXY

Смежные вопросы