Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В Java нет структур, которые можно было бы хранить в стеке…
Что не так?
for (A a : arrayListA) {
// some code
}
не допустимо в серьёзных местах. Лучше просто знать, какой list используется и как лучше его перебирать, а не доверять это for.for(int i = 0; i < arrayList.size(); ++i) {
}
for(Iterator i = linkedList.iterator(); i.hasNext(); ) {
}
for (A a : arrayListA) {
// some code
}
vector<int> q(magik.size());
magik.setContentsForVector(q);
for (unsigned int i = 0; i < q.size(); i++) {
// тут идут обращения к q[i]
// или к какому-то const Type var = &q[i]; (как-то так)
}
Да и [ ] это сложение адресов, а с итераторами — создание объектов.
До этапа профилирования
Если вы себя поймали на том, что пишите кубический алгоритм, работающий с данными, которые предоставляются пользователем, и объем которых, соответственно, диктуется им — то может и стоит задуматься о производительности сразу
std::vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
int b[3] = {4,5,6};
int* c = new int[3];
c[0] = 7;
c[1] = 8;
c[2] = 9;
std::map<int, int> d;
d[1] = 10;
d[2] = 10;
d[3] = 10;
print(a.begin(), a.end());
print(&b[0], &b[0] + 3);
print(c, c + 3);
print(d.begin(), d.end());
std::ostream& operator << (std::ostream& stream, const std::pair<int, int>& element)
{
stream << element.first + element.second;
return stream;
}
template<class T>
void print(const T& begin, const T& end)
{
for(T current = begin; current!=end;++current)
{
std::cout << (*current) << std::endl;
}
}
Set<Integer> set = new HashSet<Integer>();
set.add(2038);
set.add(2012);
set.add(1970);
set.add(1408);
set.add(1337);
for(int e: set)
out.println(e);
1337 1408 1970 2038 2012
1337 1408 1970 2012 2038
Стоит отметить, что такого рода оптимизация возможна в основном в случае ArrayList.
ListIterator с hasPrevious() и previous()?
Одна маленькая оптимизация